写在前面
Git是一个分布式版本控制系统,广泛用于软件开发和其他需要版本控制的项目中。Github和GitLab两个计算机领域绕不开的平台,都基于Git进行版本控制和协作开发。本文档将介绍一些常用的Git指令,帮助你更好地理解和使用Git。我们以Github为例进行说明。
Git配置
在使用Git之前,我们需要进行一些基本的配置,主要包括设置用户名和邮箱地址。这些信息会被记录在每次提交中,用于标识提交的作者。
打开Git Bash,执行以下命令进行配置:
|
如果去掉--global参数,则表示只对当前仓库进行配置。
如果想查看当前的配置信息,可以执行以下命令:
|
远程仓库关联
Github其实就是一个代码托管平台,用户可以在上面创建远程仓库来存储和管理代码。要将本地仓库与远程仓库关联,有以下两种方式:
git clone:用于从远程仓库克隆代码到本地。
例如我们在E:\Projects目录下打开Git Bash,执行以下命令:git clone <远程仓库地址>
得到的结果是Git会在E:\Projects目录下创建一个新的文件夹,文件夹名称与远程仓库名称相同,里面包含了远程仓库的所有代码和历史记录。结构图如下:
|
git init:在本地创建一个新的Git仓库,然后手动关联到远程仓库。
例如我们在E:\Projects目录下打开Git Bash,执行以下命令:git init
git add .
git commit -m "initial commit"
git remote add origin <远程仓库地址> //关联远程仓库
git branch -M main //把当前分支强制重命名为main
git push -u origin main
Git会在E:\Projects目录下创建一个.git文件夹,表示这是一个Git仓库。结构图如下:
|
注意以上两种方法均需要在远程仓库平台(如Github)上提前创建好远程仓库。
文件提交
在掌握怎么提交文件之前,我们需要先了解Git的工作区、暂存区和本地仓库(版本库)三个概念:
工作区
工作区是我们在电脑上看到的文件和文件夹的实际位置。我们在工作区进行文件的编辑、添加和删除等操作。
暂存区
暂存区是一个临时存储区域,用于保存我们准备提交到本地仓库的文件快照。当我们执行git add命令时,文件会被添加到暂存区。
本地仓库
本地仓库是我们电脑上存储版本历史记录的地方。当我们执行git commit命令时,暂存区的文件会被提交到本地仓库,形成一个新的版本,这个版本会有唯一的标识符且不可更改。
了解了这三个概念后,我们就可以在.git所在的目录下执行相关指令来提交文件了。
常用指令
- git add
<文件名>:将指定文件添加到暂存区。如果要添加所有修改过的文件,可以使用git add .。 - git status:查看哪些文件在暂存区中。不在暂存区代表未被git跟踪。
- git diff:查看工作区和暂存区之间的差异。
- git commit -m
"提交信息":将暂存区的文件提交到本地仓库,并附上提交信息。 - git log:查看提交历史记录。
- git diff –cached:查看暂存区和本地仓库之间的差异。
- git push origin
<分支名>:将本地仓库的更改推送到远程仓库的指定分支上。
文件拉取
文件拉取有两种操作方式:
- git pull origin
<分支名>:从远程仓库的指定分支拉取最新的更改并合并到当前分支。 - git fetch origin
<分支名>:从远程仓库获取最新的更改,但不进行合并。需要手动执行git merge命令将更改合并到当前分支。
第二种方式的安全版:
|
分支管理
分支是Git的一个重要特性,允许我们在同一个仓库中并行开发不同的功能或修复不同的bug。常用的分支管理指令如下:
创建分支
|
|
这里分支名常用feature-xxx(新功能)、bugfix-xxx(修复bug)、hotfix-xxx(紧急修复)等命名规范。
创建的分支自动继承当前分支的代码和历史记录。
切换分支
|
查看分支
|
合并分支
|
当没有冲突时,Git会自动完成合并操作,然后执行add和commit操作。如果有冲突,Git会提示你手动解决冲突,解决后你需要手动执行add和commit操作。
这里特别说明一下:origin/<源分支>代表的是本地记录的远程分支快照,不是远程仓库本身,而是你上次fetch/pull时,Git在本地保存的一个远程分支指针。因此为了确保合并的是最新的远程状态,建议先执行git fetch origin <源分支>命令。
不难看出,merge操作实际上是将两个分支的代码进行整合,生成一个新的提交记录。并且这一行为发生在本地仓库中。
删除分支
|
查看提交历史
git log
git log命令用于查看提交历史记录,在文件提交模块有提到过,这里补充一个常用的参数:
|
git log命令还有很多其他参数,可以根据需要现学现用,这里就不过度展开了。
git blame
git blame <文件名>命令用于查看文件的每一行最后一次修改的提交记录,包括提交者、提交时间和提交信息等。这个命令对于追踪代码的变更历史非常有用。
同样git blame命令也有很多参数,可以使用git blame --help命令查看详细的帮助信息。
恢复和回退
在使用Git的过程中,有时我们可能需要恢复文件到某个特定的状态。例如你写一个.py文件,写着写着红温了,文件改废了,但你又不知道改了哪里,这时候你就非常想回到上一次的提交重新来过。Git提供了多种方式来实现文件的恢复和回退,下面介绍几种常用的方法。
重中之重:恢复和回退一定要在操作之前知道后果是什么,否则你是真的欲哭无泪啊!
checkout
|
这个命令会将指定文件恢复到
易踩的坑: 如果去掉文件名,执行git checkout <commit>会把你的所有工作区的文件恢复到指定提交时的状态,但是此时,你的HEAD指针会被移动到该提交上,处于分离头指针状态。如果你在这个状态下进行新的提交,这些提交将不会属于任何分支,容易导致丢失。此时你执行git checkout <分支名>可以回到正常状态,但是这也会导致工作区的文件回到该分支的最新状态,即checkout之前的状态。所以,这一操作一般用来看历史,而不是改历史.
reset
–soft
|
用大白话说就是add还在,commit没了。
常常用在你想修改提交说明的时候。
–mixed (默认)
|
用大白话说就是add没了,commit没了,工作区还在。
常常用在你想重新选择要提交的文件的时候。
–hard
|
用大白话说就是add没了,commit没了,工作区也没了。
常常用在你这次改动彻底废了,想回到某个提交重新开始的时候。
revert
git revert命令用于撤销某个提交的更改,但不会删除该提交记录。相反,它会创建一个新的提交,内容是对指定提交的反向更改。
|
常常用在你已经将更改推送到远程仓库,但又想撤销某个提交的情况下。因为它不会修改提交历史,所以不会影响其他协作者的工作。
你可以理解为在团队协作过程中不能轻易修改远程仓库的历史提交记录。
reflog
reflog是Git的一个强大功能,用于记录HEAD指针的移动历史。可以说是我们在误操作后找回丢失提交的最后一道防线。
|
reflog条目通常以HEAD@{n}的形式表示,其中n是一个整数,表示从当前HEAD位置向后数的第n次移动。
总结
本文档介绍了Git的基本概念和常用指令,包括配置、远程仓库关联、文件提交、文件拉取、分支管理、查看提交历史以及恢复和回退等内容。掌握这些指令将帮助你更有效地使用Git进行版本控制和协作开发。
纸上得来终觉浅,绝知此事要躬行。希望大家在实际应用中学习Git,而不是看着Blog纸上谈兵。
Git功能强大,本文档只是冰山一角,建议在实际使用中不断学习和探索更多高级功能。祝你在使用Git的旅程中一切顺利!
参考资料
Lyrics Sharing
|