文章目录
Git命令大全
一、前言
随着现代科技的快速发展,计算机技术正在成为我们日常生活和工作中不可或缺的一部分。计算机编程已经成为了许多人生活和工作的重要组成部分,而版本控制则是计算机编程过程中必不可少的一环。版本控制是一种有效的协作方式,它可以让多人在同一时刻对同一代码库进行修改,从而让开发者在协作过程中更加高效地工作。
Git是目前最受欢迎的版本控制系统之一,由Linux的创始人之一Linus Torvalds开发。Git采用分布式版本控制方式,这意味着它不像传统的版本控制系统一样,不需要由一个中央服务器来管理代码库,而是将整个代码库分成许多小的本地仓库,每个本地仓库都可以自由地进行修改和操作,修改后再通过网络同步到其他的本地仓库中。
Git相对于其他版本控制系统的优点在于它具有良好的性能、灵活的分支支持和强大的历史记录跟踪功能。这些优点使得Git成为了众多开源项目和商业项目的首选版本控制系统,并成为了许多程序员必备的技能。
对于刚刚开始学习Git的开发者来说,了解版本控制的基本概念和Git的使用方法是非常重要的。在基本概念方面,需要了解Git工作原理、Git的三个阶段(工作区、暂存区、版本库等)以及多人协作等基本知识。在使用方法方面,需要掌握Git的各种命令,并能够结合实际情况灵活使用Git的分支管理、版本控制、代码提交等功能。
二、安装
1. Windows系统上的Git安装
- 下载Git安装程序:访问Git官方网站,从下载页面中选择Windows版本的Git安装程序,推荐使用最新版。下载后双击运行安装程序,根据提示完成安装。
- 配置Git环境变量:安装Git后,在命令行中输入
git --version
验证是否安装成功。若无法运行git命令,则需要手动配置Git环境变量。具体方法是在系统环境变量PATH
中添加Git的安装路径。
2. Linux系统上的Git安装
apt-get
安装方式(Debian/Ubuntu):在终端中使用以下命令安装Git。
sudo apt-get update
sudo apt-get install git
yum
安装方式(CentOS/RHEL):在终端中使用以下命令安装Git。
sudo yum install git
- 源码安装方式:从Git官方网站下载源代码,解压后运行以下命令进行编译和安装:
make prefix=/usr/local all
sudo make prefix=/usr/local install
3. MAC系统上的Git安装
- 使用
homebrew
安装Git:Homebrew是Mac系统下的一款包管理工具,可以通过以下命令安装Git。
brew install git
- 使用
MacPorts
安装Git:MacPorts也是一款Mac系统下的包管理工具,使用以下命令安装Git。
sudo port install git-core
安装完成后,可以在终端中使用git --version命令进行验证是否安装成功。
三、配置
安装完Git后需要进行一些基础的配置。具体参考以下命令行操作:
# 设置Git的用户名
git config --global user.name "Your Name"
四、配置用户名和邮箱地址
# 设置Git的邮箱地址
git config --global user.email "Your Email"
五、创建仓库
1. 在本地创建空目录作为Git的仓库
- 创建一个新项目的文件夹,例如"demo"。
- 打开终端或
Git Bash
,输入cd命令并加上新项目的路径,例如:cd /Users/username/demo
- 使用
git init
命令初始化Git仓库。具体命令如下:
$ git init Initialized empty Git repository in /Users/username/demo/.git/
初始化完毕后,Git会在新项目的文件夹中生成一个隐藏的.git目录,这个目录是Git仓库的核心组成部分,其中包含了Git的所有配置和历史记录。此时你已经成功创建了一个本地的Git仓库。
2. 从现有的Git服务器拉取一个Git仓库副本
- 打开终端或
Git Bash
,进入要克隆仓库的目录,例如cd /Users/username
。 - 使用
git clone
命令克隆一个现有的Git仓库。具体命令如下:
$ git clone https://github.com/username/repository.git
其中,
https://github.com/username/repository.git
是要克隆的Git仓库地址。
成功克隆仓库后,Git会将仓库副本复制到你本地的文件夹中。此时你已经成功创建了一个本地的Git仓库,并且获取了Git仓库中所有的历史记录和文件。
六、工作区
1. 添加文件
使用
git add
命令将工作区中修改后的文件添加到暂存区,之后再使用
git commit
提交到版本库中。
例如,在工作区中修改了一个文件index.html,我们使用
git add
命令将其添加到暂存区。
$ git add index.html # 添加index.html文件到暂存区
$ git commit -m "modify index.html file"# 提交修改
2. 查看状态
使用
git status
命令可以查看工作区和暂存区的状态,比如文件是否修改,是否已经添加到暂存区等。
例如,使用
git status
命令查看当前工作区和暂存区的状态。
$ git status # 查看工作区和暂存区的状态
3. 撤销修改
如果我们在工作区修改了一个文件,但又不希望提交这个修改,可以使用
git checkout
命令,它可以将工作区中的修改撤销掉(但是注意,这会删除已经修改的文件内容,所以要谨慎操作)。
例如,我们在工作区中修改了一个文件index.html,但是又不想使用这个修改,可以使用如下命令将修改撤销:
$ git checkout --index.html # 将index.html文件的修改撤销
4. 删除文件
使用
git rm
命令可以删除工作区中的文件,并将其同时从暂存区和版本库中删除。
例如,我们可以使用如下命令删除工作目录下的index.html文件:
$ git rm index.html # 删除index.html文件
$ git commit -m "delete index.html file"# 提交删除操作
5. 移动文件
如果我们要移动一个文件到新的目录,可以使用
git mv
命令,它可以同时将文件移动到新目录并将移动操作提交到版本库中。
例如,我们需要将工作区中的index.html文件移动到新目录subdir中:
$ git mv index.html subdir/index.html # 将index.html文件移动到subdir目录中
$ git commit -m "move index.html to subdir"# 提交移动操作
七、暂存区
1. 添加到暂存区
使用
git add
命令将工作区修改的文件添加到暂存区,例如添加一个文件my_file。
$ touch my_file # 在工作区中创建文件my_file
$ git add my_file # 将my_file添加到暂存区
2. 查看暂存区状态
使用
git status
命令查看暂存区状态,可以列出暂存区中已经准备好的文件清单。
例如,使用
git status
命令查看当前暂存区中的状态。
$ git status # 查看暂存区中的状态
3. 移除文件或目录
使用
git rm
命令可以将暂存区中的文件或目录从Git版本库中删除,例如删除暂存区中的一个文件my_file。
$ git rm my_file # 删除暂存区中的my_file文件
$ git commit -m "delete my_file"# 将修改提交到版本库中
4. 恢复文件或目录
使用
git reset
命令可以将暂存区中的文件或目录恢复到工作区中,例如将暂存区中的my_file文件的修改内容恢复到工作区。
$ git reset my_file # 恢复暂存区中my_file的修改内容
八、提交
1. 提交到本地仓库
在Git中,我们需要先将代码保存在本地仓库中,然后再将其推送到远程仓库中。要将代码提交到本地仓库,我们需要使用
git add
和
git commit
命令。
使用
git add
命令将代码变更添加到暂存区中。暂存区是一个将要提交的代码变更的缓存区域。
git add <file>
使用
git commit
命令将暂存区中的代码变更提交到本地仓库中。提交时,我们需要提供一个提交信息,用于说明本次提交的目的。
git commit -m "commit message"
2. 撤销提交
在Git中,我们可以使用
git reset
命令来撤销提交。撤销后,代码变更会回退到上一次提交的状态。
使用git reset HEAD~命令可以撤销上一次提交:
git reset HEAD~
也可以使用
git reset <commit>
命令来撤销指定的提交,其中是需要撤销的提交的哈希值。
git reset <commit>
注意,撤销提交会删除提交信息和提交所包含的代码变更,慎用。
3. 查看提交日志
我们可以使用
git log
命令来查看提交日志。提交日志会显示每一次提交的哈希值、作者、提交时间和提交信息。
git log
我们可以使用不同的选项来过滤提交日志的显示。例如,使用
--author
选项可以只显示指定作者提交的日志:
git log --author=<author>
4. 修改提交信息
如果我们提交时写错了提交信息,可以使用
git commit --amend
命令来修改提交信息。
git commit --amend -m "new commit message"
注意,使用–amend选项修改提交信息会修改提交哈希值,因此只适用于还未推送到远程仓库的提交。
如果修改的是最后一次提交的提交信息,我们也可以使用
git commit --amend
命令的简写:
git commit --amend
5. 修改上一次提交
有时候,我们提交时可能漏掉了一些代码变更或写错了变更内容,希望将这些变更合并到上一次提交中。可以使用
git commit --amend
命令来修改上一次提交。
git add <file>
git commit --amend
我们先使用
git add
命令将漏掉的代码变更添加到暂存区中,然后使用
git commit --amend
命令将其合并到上一次提交中。
需要注意的是,修改上一次提交会修改其哈希值,因此只适用于还未推送到远程仓库的提交。
九、分支操作
1. 创建分支
在Git中,我们可以使用
git branch
命令来创建新的分支。创建分支时,我们需要指定新分支的名称。
git branch <branch-name>
此时代码库中存在两个指针,HEAD指向当前所在的分支,另一个指针指向新创建的分支。
2. 切换分支
使用
git checkout
命令切换分支。切换分支后,HEAD指针会指向当前分支。
git checkout <branch-name>
3. 查看分支
查看分支
使用
git branch
命令查看分支。使用-a选项可以查看所有分支,包含本地和远程分支。
git branch -a
使用-v选项可以查看每个分支的最后一次提交。
git branch -v
4. 删除分支
使用
git branch -d
命令删除本地分支。如果分支未合并,需要使用-D选项强制删除。
git branch -d <branch-name>
如果需要删除远程分支,我们需要使用
git push
命令,将空的分支推送到远程仓库。
git push origin :<branch-name>
5. 合并分支
5.1 Fast-forward合并
如果从分支创建以来没有在当前分支上进行过提交,那么Git会采用
fast-forward
合并,可快速合并分支。
假设我们现在在分支
branch-A
中进行了提交,想要将branch-A合并到main分支。
git checkout main
git merge branch-A
此时,main分支已经包含了
branch-A
分支的代码变更。
5.2 非Fast-forward合并
如果当前分支和被合并的分支都进行了提交,Git会使用一种
非fast-forward的合并方式
。此时,Git会在合并日志中添加一个新的提交,来记录分支的合并记录。
假设在分支branch-A和main上都进行了提交,并且存在冲突。
git checkout main
git merge branch-A
此时,Git会自动提示存在冲突。我们需要手动解决冲突,并提交合并结果。
git add <conflicting-file>
git commit
6. 解决冲突
在进行分支合并时,可能会出现冲突。如果出现冲突,Git会自动提示我们,需要手动解决冲突并重新提交。
当出现冲突时,我们需要先使用
git status
命令查看冲突文件。
git status
然后,我们需要手动编辑冲突文件,删除不需要的代码。
<<<<<<< HEAD
<code>
=======
<code>
>>>>>>> branch-A
编辑完成后,我们需要使用
git add
命令将编辑后的文件添加到暂存区,然后再提交合并结果。
git add <conflicting-file>
git commit
十、远程仓库
1. 创建远程仓库
我们可以使用Github、GitLab等Git托管服务创建远程仓库。在创建远程仓库时,需要提供仓库名称、描述等信息。
2. 关联远程仓库
在本地Git工作区中与远程仓库进行通信之前,我们需要将两者进行关联。我们可以使用
git remote add
命令来关联远程仓库。
git remote add origin <remote-repository-URL>
在这里,URL是远程Git托管服务提供的仓库URL地址,origin是自己定义本地仓库对应的名称,该名称在下面的对话框中使用的较为频繁。
3. 克隆远程仓库
如果我们想获取一个远程Git仓库的完整副本,将其克隆到本地,我们可以使用
git clone
命令。
git clone <remote-repository-URL>
此时远程仓库的文件将会被克隆到本地。
4. 推送到远程仓库
要将本地仓库的代码更改推送到远程仓库,我们可以使用git push命令。
git push <remote-name> <branch-name>
在这里,是远程仓库的名称,通常为origin;是本地分支的名称,需要将其推送到远程仓库。
5. 从远程仓库拉取代码
在Git中,我们可以使用
git pull
命令从远程仓库拉取代码,与
git push
命令类似。
git pull <remote-name> <branch-name>
使用上述命令,Git将从远程仓库的中拉取分支的最新代码。
6. 查看远程仓库信息
我们可以使用
git remote
命令查看当前本地仓库关联的所有远程仓库。
git remote
使用
git remote -v
命令可以查看每个远程仓库的详细信息。
git remote -v
7. 删除远程仓库
如果我们不再需要远程仓库,可以使用
git remote remove
命令将其删除。
git remote remove <remote-name>
在这里,是需要删除的远程仓库的名称。
8. SSH方式连接远程仓库
除了HTTP协议之外,我们还可以使用
SSH协议与远程仓库进行通信
。要使用
SSH
连接到远程Git服务器,我们需要向远程服务器生成
SSH密钥
。
ssh-keygen -t rsa -C "[email protected]"
在命令后面输入你的email,然后一路回车即可。
然后,我们需要将公钥添加到远程Git服务器的“
SSH keys
”中。在Github或GitLab网站的“settings”页面中,可以找到“
SSH and GPG keys
”选项。
添加公钥后,我们可以使用以下命令将本地仓库与远程仓库关联。
git remote add origin [email protected]:<username>/<repository>.git
在这里,和分别是远程Git仓库的用户名和仓库名称。我们在本地修改代码并推送时,可以使用如下命令推送代码更改到远程仓库。
git push origin <branch>
其中,是需要被推送到远程仓库的分支的名称。
十一、标签
1. 创建标签
我们可以使用
git tag
命令创建标签。
git tag <tagname>
这个命令会在当前分支的HEAD处创建一个轻量级的标签。如果要创建一个带有附注的标签,可以使用-a选项,并在后面添加标签信息。
git tag -a <tagname> -m "tag info"
2. 查看标签
我们可以使用
git tag
命令查看所有标签。
git tag
使用-l选项可以根据匹配模式查找标签。
git tag -l "v1.*"
3. 删除标签
我们可以使用
git tag
命令删除标签。
git tag -d <tagname>
4. 推送标签
我们需要使用
git push
命令将标签推送到远程仓库。
git push <remote-name> <tagname>
在这里,是远程仓库的名称,如origin。如果要将所有标签推送到远程仓库,可以使用–tags选项。
git push <remote-name> --tags
十二、其他常用命令
1. git diff命令:比较文件的差异
git diff file1 file2
2. git branch命令:列出本地分支
git branch
3. git checkout命令:切换分支或checkout文件
git checkout <branch-name>
git checkout <file>
4. git stash命令:暂存当前所有更改并回到上一个提交状态
git stash
git stash apply
5. git rebase`将当前分支的提交放置在另一个分支的末尾,并在必要时解决冲突。
假设我们有两个分支:master和feature,我们在feature分支上做了一些开发工作后,想要将这些更改合并到master分支中。我们可以使用
git rebase
命令将feature分支上的提交放置在master分支的末尾。以下是一些示例命令:
- 切换到feature分支:
git checkout feature
- 使用
git rebase
命令将feature分支上的提交重放到master分支上:
git rebase master
- 如果有冲突需要解决,则需要手动解决冲突,然后使用以下命令继续重放提交:
git add <文件名>
git rebase --continue
- 如果需要终止
git rebase
操作,则可以使用以下命令:
git rebase --abort
使用git rebase命令需要谨慎,确保我们理解重放提交对分支历史的影响,并且只在必要时进行操作。
6. git cherry-pick`将一个特定的提交应用于当前分支,无需将整个分支合并。
假设我们有两个分支:master和feature,我们在feature分支上做了一些特定的更改,我们只需要将一个特定的提交应用到master分支上,而不必将整个分支合并。我们可以使用
git cherry-pick
命令来实现。以下是一些示例命令:
- 切换到master分支:
git checkout master
- 使用
git log
命令查看feature分支上的提交历史,获取需要应用到master分支的提交的SHA-1值。 - 使用
git cherry-pick
命令将特定的提交应用到master分支上:
git cherry-pick <SHA-1值>
- 如果有冲突需要解决,则需要手动解决冲突,然后使用以下命令继续合并提交:
git add <文件名>
git cherry-pick --continue
- 如果需要终止
git cherry-pick
操作,则可以使用以下命令:
git cherry-pick --abort
使用git cherry-pick命令需要谨慎,确保我们理解应用特定提交对分支历史的影响,并且只在必要时进行操作。
7. git bisect`用于二分查找一个提交引入错误的位置,确定哪个提交引入了错误。
- 使用
git bisect start
来开始查找错误:
git bisect start
- 标记当前提交为错误/有问题的提交:
git bisect bad
- 标记一个之前未发现问题的提交为良好/未受损的提交:
git bisect good <SHA-1值>
- 自动跳转到下一个标记,再次测试并标记为错误/良好:
git bisect (good/bad)
- 查看当前进度:
git bisect log
8. git reflog`查看本地库的历史操作日志,包括撤销和删除的操作。
- 查看所有本地操作的历史记录:
git reflog
- 恢复一个已删除的分支或重置成之前的状态:
git reflog <分支名>
git reset --hard <SHA-1值>
9. git submodule`将另一个Git仓库作为当前目录中的子目录进行引用,轻松地维护多个相关的代码库。
- 添加一个子模块:
git submodule add <URL> <路径>
- 对库进行更新(包括其子模块):
git submodule update --init --recursive
- 克隆一个带有子模块的仓库:
git clone --recurse-submodules <URL>
10. git blame 用于查看每一行代码最近一次修改的提交信息。
查看文件中每一行代码的最近一次修改提交信息:
git blame <文件名>
11. git graft 用于将另一个Git仓库的部分提交合并到当前仓库,但是它不像子模块那样将整个仓库作为子目录引入。
查看文件中每一行代码的最近一次修改提交信息:
git blame <文件名>
12. git worktree 用于查看每一行代码最近一次修改的提交信息。
- 创建一个新的工作目录并检出不同的分支:
git worktree add -b <分支名> <文件夹名> <起点>
- 列出当前目录中存在的工作目录:
git worktree list
13. git annex 用于查看每一行代码最近一次修改的提交信息。
- 将文件加入 annex:
git annex add <文件名>
- 随时获取 annex 中的文件,即使它们不在本地:
git annex sync
14. git mergetool 用于解决合并冲突,可以调用图形化工具来协助解决冲突。
- 将图形化工具配置为解决冲突:
git config --global merge.tool <工具名>
- 启动图形化工具:
git mergetool
十三、总结
在本篇文章中,我们介绍了Git中标签和其他常用命令。标签是Git中很有用的功能,可以帮助我们更好地标记版本和重要的里程碑。其他常用命令提供了一种简单方便的方式来进行代码的管理,包括查看提交记录、比较文件差异、暂存当前所有更改等。掌握这些技巧对于使用Git进行版本控制和管理代码是非常有帮助的。
版权归原作者 陈书予 所有, 如有侵权,请联系我们删除。