Git:修订间差异

无编辑摘要
 
(未显示同一用户的14个中间版本)
第10行: 第10行:
*2020年03月23日,发布git 2.26 版
*2020年03月23日,发布git 2.26 版


=== 仓库托管服务 ===
很多公司提供了Git仓库的托管服务。
{| class="wikitable"
! 名称
! 公司
! 描述
|-
| [[GitHub]]
| 微软
| 提供付费账户和免费账户,都可以建立公开或私有的代码仓。。截止2023年,Github是世界上最大的代码托管网站和开源社区。
|-
| [[CODING]]
| 腾讯
| 提供付费账户和免费账户
|-
| [[GitLab]]
| GitLab
|
|-
| Gitee
| OSCHINA
|
|}


== 基本知识 ==
=== 安装 ===
Linux中一般默认已经按照git, Windows中安装如下;
*1.下载安装程序,https://git-scm.com/download/win
*2.点击安装
{{了解更多
|[https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git 《Pro Git》 中文版V2:1.5 起步 - 安装 Git]
}}
 
== 快速入门 ==
=== 基本原理 ===
=== 基本原理 ===
{{#drawio:git工作原理}}
{{#drawio:git工作原理}}
第17行: 第48行:
|[https://git-scm.com/book/zh/v2/起步-Git-是什么? 《Pro Git》 中文版V2:起步-Git-是什么?]
|[https://git-scm.com/book/zh/v2/起步-Git-是什么? 《Pro Git》 中文版V2:起步-Git-是什么?]
}}
}}
=== 使用示例 ===
<syntaxhighlight lang="bash" >
# 设置一次Git的全局用户名和邮箱
git config --global user.name "Your Name"
git config --global user.email yourname@example.com
# 在一个目录下,初始化git仓库
# 会在该目录自动生成一个.git目录
git init
</syntaxhighlight>


=== .git 目录 ===  
=== .git 目录 ===  
第38行: 第85行:
}}
}}


==Git 命令==
 
===设置与配置===
==配置==
{| class="wikitable"  
{| class="wikitable"  
|-
|-
! 命令
! 命令
! 描述
! 描述
! 示例
|-
|-
|
|查看配置
|
|<code>git config --list</code>查看所有配置信息<br /><code>git config user.name</code> 查看某一项配置 <br />  <code>git config --list --show-origin</code> 查看所有的配置以及它们所在的文件 <br />
|
|-
|设置用户信息
|配置全局用户名称和邮箱,<syntaxhighlight lang="bash" >
git config --global user.name "Your Name"
git config --global user.email yourname@example.com
</syntaxhighlight>
如果某个项目想要使用不同的用户名称与邮件地址时,在项目目录,使用不带<code>--global</code>设置用户信息。
|}
|}
{{了解更多
{{了解更多
第54行: 第106行:
}}
}}


===创建和获取项目===
==创建仓库==
{| class="wikitable"  
{| class="wikitable"  
|-
|-
第63行: 第115行:
| git init
| git init
| 初始化一个Git仓库
| 初始化一个Git仓库
| git init myproject
| <code>git init myproject</code>
|-
|-
| git clone
| git clone
第71行: 第123行:
|}
|}


===快照===
==快照==
 
{| class="wikitable"
|-
! 命令
! 描述
! 示例
|-
| git add
| 添加文件到暂存区
| <code>git add README.md</code>  </br> <code>git add .</code>
|-
| git commit
| 提交更新到本地仓库
| <code>git commit -m "Update README"</code>
|-
| git status
| 查看文件状态
| git status
|-
| git diff
| 比较工作区和暂存区差异
| git diff
|-
| [https://git-scm.com/docs/git-reset/zh_HANS-CN git reset]
| 重置当前HEAD到指定状态。可以使用<code>git log --oneline</code>或<code>git reflog</code>查看要回滚的版本。  <br /><br />参数:<br /><code>--soft</code>:本地仓库回滚,但是暂存区和工作区保持不变。<br /><code>--mixed</code>:本地仓和暂存区回滚,默认参数,等同于git reset。<br /><code>--hard</code>:本地仓、暂存区和工作区都回滚。注意,如果工作区有没有提交的代码就找不回。
|<code>git reset --soft HEAD~1</code>  <br /><code>git reset HEAD~1</code><br /><code>git reset --hard HEAD~1</code> <br /><code>git reset --hard cba9527</code>
|-
| git rm
| 从暂存区和工作区删除文件
| git rm README.md
|-
| git mv
| 移动或重命名文件、目录
| git mv file.txt file2.txt
|-
| [https://git-scm.com/docs/git-clean/zh_HANS-CN git clean]
| 删除工作区未跟踪文件。 <br /><br />常用参数:<br /><code>-d</code>  <br /><code>-f</code>直接删除。<br /><code>-i</code>交互模式,显示会做什么,并以交互方式清理文件。
| <code>git clean -i</code><br /><code>git clean -di</code><br /><code>git clean -df</code>
|}
{{了解更多
{{了解更多
|[https://git-scm.com/book/zh/v2/附录-C:-Git-命令-快照基础《Pro Git》 中文版V2:附录 C: Git 命令 - 快照基础]
|[https://git-scm.com/book/zh/v2/附录-C:-Git-命令-快照基础《Pro Git》 中文版V2:附录 C: Git 命令 - 快照基础]
}}
}}


===分支===
==分支管理==
{| class="wikitable"  
{| class="wikitable"  
|-
|-
第90行: 第179行:
| git checkout
| git checkout
| 切换分支,或者检出内容到工作目录。
| 切换分支,或者检出内容到工作目录。
| <code>git checkout dev</code>切换到dev分支
| <code>git checkout dev</code>切换到dev分支 <br /><code>git checkout -b main</code> 创建一个新的 main 分支并立即切换到该分支。 <syntaxhighlight lang="bash" >
git checkout -b main
git push origin main
git branch -d master
</syntaxhighlight> 将master分支重命名为main分支。1.创建 main 分支。2.main 分支推送到远程存储库,并覆盖旧的 master 分支。3.删除旧的 master 分支
|-
|-
| git log
| git log
第115行: 第208行:
|[https://git-scm.com/book/zh/v2/附录-C:-Git-命令-分支与合并《Pro Git》 中文版V2:附录 C: Git 命令 - 分支与合并]
|[https://git-scm.com/book/zh/v2/附录-C:-Git-命令-分支与合并《Pro Git》 中文版V2:附录 C: Git 命令 - 分支与合并]
}}
}}
==远程==
{| class="wikitable"
|-
! 命令
! 描述
! 示例
|-
|git clone
|克隆远程仓库
|
|-
|git remote -v
|查看远程仓库列表。用于查看当前仓库已经配置的远程仓库列表,以及它们的URL。
|<code>git remote -v</code>
|-
|git remote show <远程仓库名> 
|查看特定远程仓库的详细信息。默认情况下,有一个 origin 的远程仓库名,它是 Git 的默认远程仓库名称。多个远程仓库时,可以使用不同的名称来管理。
| <code>git remote show origin</code> 显示origin远程仓库的信息,包括远程仓库地址,分支等信息。
|-
| git remote add <远程仓库名> <URL>
|
|
|-
| git fetch <远程仓库名> 
| 获取远程代码
|
|-
|git pull <远程仓库名> <分支名>
| 拉取远程代码及立即合并,相当于git fetch后执行git mergin。
| <code>git pull origin main</code> 从远程的"origin"仓库的"main"分支中拉取最新的更改并将其合并到你的本地分支中。
|-
| git push <远程仓库名> <本地分支名>:<远程分支名>
|推送本地更改
| <code>git push origin main</code> 将本地当前分支推送到远程origin仓库的main分支。 <br /> <code>git push origin --delete test</code>删除远程名称为test的分支,注意先备份数据。
|-
|
|
|
|-
|
|
|
|}
==Hooks 钩子==
Git 钩子(Hooks )用于在特定的重要动作发生时触发自定义脚本。分为客户端的和服务器端的。
{{了解更多
|[https://git-scm.com/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-Git-%E9%92%A9%E5%AD%90 中文版V2:8.3 自定义 Git - Git 钩子 ]
}}
===快速入门===
钩子默认位于Git目录下<code>.git/hooks</code>目录中,文件名为钩子名称(没有扩展名),如<code>pre-commit</code>,该文件将在commit前运行。初始化git项目时,hooks目录下有很多示例脚本,都是以<code>.sample</code>结尾,如果要启用去掉这个后缀。
以下示例使用<code>post-commit</code>钩子在每次提交时将最新的 commit ID 写入一个 version.txt 文件。
*创建钩子:<code>touch .git/hooks/post-commit</code>。
*编辑钩子:
<syntaxhighlight lang="bash" >
#!/bin/sh
# 获取最新的短 commit ID
COMMIT_ID=$(git rev-parse --short HEAD)
# 将 commit ID 写入临时文件
echo $COMMIT_ID > version.txt.tmp
# 如果 version.txt 不存在或内容不同于临时文件,才更新 version.txt
if [ ! -f version.txt ] || ! cmp -s version.txt.tmp version.txt; then
    mv version.txt.tmp version.txt
    git add version.txt
    git commit --amend --no-edit --allow-empty
else
    rm version.txt.tmp
fi
</syntaxhighlight>
* 使 post-commit 钩子可执行:<code>chmod +x .git/hooks/post-commit</code>
{{了解更多
|[https://git-scm.com/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-Git-%E9%92%A9%E5%AD%90 中文版V2:8.3 自定义 Git - Git 钩子 ]
}}
==设置==
=== Linux终端显示当前Git分支 ===
进入用户的Home目录,编辑.bashrc文件
<syntaxhighlight lang="bash">
cd ~ 
vim .bashrc 
</syntaxhighlight>
将下面代码加入.bashrc文件末尾,并保存:
<syntaxhighlight lang="bash">
function git_branch {
  branch="`git branch 2>/dev/null | grep "^\*" | sed -e "s/^\*\ //"`"
  if [ "${branch}" != "" ];then
      if [ "${branch}" = "(no branch)" ];then
          branch="(`git rev-parse --short HEAD`...)"
      fi
      echo " ($branch)"
  fi
}
export PS1='\u@\h \[\033[01;36m\]\W\[\033[01;32m\]$(git_branch)\[\033[00m\] \$ '
</syntaxhighlight>
保存并退出,执行加载命令
<syntaxhighlight lang="bash">
source ./.bashrc
</syntaxhighlight>




==资源==
==资源==
===官网===
===官网===
*[https://git-scm.com/ Git]
*Git 官网:https://git-scm.com/  
*[https://git-scm.com/doc Git 文档]
*Git 文档:https://git-scm.com/doc  
*[https://git-scm.com/docs Git 文档:参考]
* Git 文档 参考 https://git-scm.com/docs
*[https://git-scm.com/book/zh/v2 Git 文档:书籍《Pro Git》中文版]
*Git 文档:书籍《Pro Git》中文版 :https://git-scm.com/book/zh/v2  


==参考文献==
===文章===
*[https://zh.wikipedia.org/wiki/Git 维基百科:git]
*[https://zh.wikipedia.org/wiki/Git 维基百科:git]


[[分类:编程工具]]
[[分类:编程工具]]

2024年5月20日 (一) 07:20的最新版本

git是一个分布式版本控制软件,最初由林纳斯·托瓦兹创作,于2005年以GPL发布。最初目的是为更好地管理Linux内核开发而设计。

简介

时间轴

  • 2002年,林纳斯·托瓦兹决定使用BitKeeper作为Linux内核主要的版本控制系统用以维护代码。
  • 2005年,Andrew Tridgell违反的BitKeeper使用原则,进行逆向工程,导致无偿使用BitKeeper的许可被收回。 林纳斯·托瓦兹决定自行开发版本控制系统替代BitKeeper,以十天的时间编写出git第一个版本。
  • 2005年07月11日,发布git 0.99 版
  • 2005年12月21日,发布git 1.0 版
  • 2014年05年28日,发布git 2.0 版
  • 2020年03月23日,发布git 2.26 版

仓库托管服务

很多公司提供了Git仓库的托管服务。

名称 公司 描述
GitHub 微软 提供付费账户和免费账户,都可以建立公开或私有的代码仓。。截止2023年,Github是世界上最大的代码托管网站和开源社区。
CODING 腾讯 提供付费账户和免费账户
GitLab GitLab
Gitee OSCHINA

安装

Linux中一般默认已经按照git, Windows中安装如下;

了解更多 >> 《Pro Git》 中文版V2:1.5 起步 - 安装 Git


快速入门

基本原理

drawio: git工作原理

了解更多 >> 《Pro Git》 中文版V2:起步-Git-是什么?


使用示例

# 设置一次Git的全局用户名和邮箱
git config --global user.name "Your Name"
git config --global user.email yourname@example.com

# 在一个目录下,初始化git仓库
# 会在该目录自动生成一个.git目录
git init


.git 目录

所有git工作目录下都有个.git目录,该目录包含几乎所有git操作和数据内容。当使用git init初始化目录会自动生成该文件夹。

名称 描述
config 该项目的特有配置,

了解更多 >> 《Pro Git》 中文版V2:10.1 Git 内部原理 - 底层命令与上层命令



配置

命令 描述
查看配置 git config --list查看所有配置信息
git config user.name 查看某一项配置
git config --list --show-origin 查看所有的配置以及它们所在的文件
设置用户信息 配置全局用户名称和邮箱,
git config --global user.name "Your Name"
git config --global user.email yourname@example.com

如果某个项目想要使用不同的用户名称与邮件地址时,在项目目录,使用不带--global设置用户信息。

了解更多 >> Git》 中文版V2:附录 C: Git 命令 - 设置与配置


创建仓库

命令 描述 示例
git init 初始化一个Git仓库 git init myproject
git clone 克隆一个Git仓库到本地 git clone https://github.com/git/git.git

快照

命令 描述 示例
git add 添加文件到暂存区 git add README.md
git add .
git commit 提交更新到本地仓库 git commit -m "Update README"
git status 查看文件状态 git status
git diff 比较工作区和暂存区差异 git diff
git reset 重置当前HEAD到指定状态。可以使用git log --onelinegit reflog查看要回滚的版本。

参数:
--soft:本地仓库回滚,但是暂存区和工作区保持不变。
--mixed:本地仓和暂存区回滚,默认参数,等同于git reset。
--hard:本地仓、暂存区和工作区都回滚。注意,如果工作区有没有提交的代码就找不回。
git reset --soft HEAD~1
git reset HEAD~1
git reset --hard HEAD~1
git reset --hard cba9527
git rm 从暂存区和工作区删除文件 git rm README.md
git mv 移动或重命名文件、目录 git mv file.txt file2.txt
git clean 删除工作区未跟踪文件。

常用参数:
-d
-f直接删除。
-i交互模式,显示会做什么,并以交互方式清理文件。
git clean -i
git clean -di
git clean -df

了解更多 >> Git》 中文版V2:附录 C: Git 命令 - 快照基础


分支管理

命令 描述 示例
git branch 列出/创建/删除分支 git branch列出所有分支
git branch -v
git branch dev创建名称为dev分支
git checkout 切换分支,或者检出内容到工作目录。 git checkout dev切换到dev分支
git checkout -b main 创建一个新的 main 分支并立即切换到该分支。
git checkout -b main
git push origin main
git branch -d master
将master分支重命名为main分支。1.创建 main 分支。2.main 分支推送到远程存储库,并覆盖旧的 master 分支。3.删除旧的 master 分支
git log 查看提交历史记录 git log
git log --oneline
git tag 打标签,创建、列出、删除标签。 git tag列出标签
git tag -l "v2.3.5*"列出v2.3.5开头标签
git merge 合并一个或者多个分支
git mergetool 解决合并冲突
git stash 暂存当前工作目录状态

了解更多 >> Git》 中文版V2:附录 C: Git 命令 - 分支与合并


远程

命令 描述 示例
git clone 克隆远程仓库
git remote -v 查看远程仓库列表。用于查看当前仓库已经配置的远程仓库列表,以及它们的URL。 git remote -v
git remote show <远程仓库名> 查看特定远程仓库的详细信息。默认情况下,有一个 origin 的远程仓库名,它是 Git 的默认远程仓库名称。多个远程仓库时,可以使用不同的名称来管理。 git remote show origin 显示origin远程仓库的信息,包括远程仓库地址,分支等信息。
git remote add <远程仓库名> <URL>
git fetch <远程仓库名> 获取远程代码
git pull <远程仓库名> <分支名> 拉取远程代码及立即合并,相当于git fetch后执行git mergin。 git pull origin main 从远程的"origin"仓库的"main"分支中拉取最新的更改并将其合并到你的本地分支中。
git push <远程仓库名> <本地分支名>:<远程分支名> 推送本地更改 git push origin main 将本地当前分支推送到远程origin仓库的main分支。
git push origin --delete test删除远程名称为test的分支,注意先备份数据。

Hooks 钩子

Git 钩子(Hooks )用于在特定的重要动作发生时触发自定义脚本。分为客户端的和服务器端的。

了解更多 >> 中文版V2:8.3 自定义 Git - Git 钩子


快速入门

钩子默认位于Git目录下.git/hooks目录中,文件名为钩子名称(没有扩展名),如pre-commit,该文件将在commit前运行。初始化git项目时,hooks目录下有很多示例脚本,都是以.sample结尾,如果要启用去掉这个后缀。

以下示例使用post-commit钩子在每次提交时将最新的 commit ID 写入一个 version.txt 文件。

  • 创建钩子:touch .git/hooks/post-commit
  • 编辑钩子:
#!/bin/sh

# 获取最新的短 commit ID
COMMIT_ID=$(git rev-parse --short HEAD)

# 将 commit ID 写入临时文件
echo $COMMIT_ID > version.txt.tmp

# 如果 version.txt 不存在或内容不同于临时文件,才更新 version.txt
if [ ! -f version.txt ] || ! cmp -s version.txt.tmp version.txt; then
    mv version.txt.tmp version.txt
    git add version.txt
    git commit --amend --no-edit --allow-empty
else
    rm version.txt.tmp
fi
  • 使 post-commit 钩子可执行:chmod +x .git/hooks/post-commit

了解更多 >> 中文版V2:8.3 自定义 Git - Git 钩子


设置

Linux终端显示当前Git分支

进入用户的Home目录,编辑.bashrc文件

cd ~  
vim .bashrc

将下面代码加入.bashrc文件末尾,并保存:

function git_branch {
   branch="`git branch 2>/dev/null | grep "^\*" | sed -e "s/^\*\ //"`"
   if [ "${branch}" != "" ];then
       if [ "${branch}" = "(no branch)" ];then
           branch="(`git rev-parse --short HEAD`...)"
       fi
       echo " ($branch)"
   fi
}
export PS1='\u@\h \[\033[01;36m\]\W\[\033[01;32m\]$(git_branch)\[\033[00m\] \$ '

保存并退出,执行加载命令

source ./.bashrc


资源

官网

文章