Git的详细使⽤教程——三部曲
Git详细使⽤三部曲
作为⼀名开发⼈员,在我们平时的开发中会经常遇到版本管理⼯具,今天我们就来说说Git的使⽤,最近我膜拜了蒋鑫的《Git权威指南》⼀书,收益良多,在此和⼤家交流交流。
Git是⼀种分布式版本管理⼯具,每个⼈参与开发⼈员的电脑都是⼀台代码的仓库,使⽤起来特别灵活,这⾥我们就不对Git的安装和配置做说明了,⽹上相关内容很多。Git的优点也就不多说了,直接开始使⽤吧。
Git的使⽤可以说主要分为三部曲来说明,其余的所有命令都是为这三个命令服务的。下⾯我会对其做详细说明。
三部曲命令
添加到暂存区git add
提交到版本库git commit
提交到远端git push
以上三个命令是最主要的命令了,其他的命令都是为其服务的,可以将其功能和命令的列举出来。
辅助功能命令
初始化仓库git init
克隆代码git clone
⽐较差异git diff
查看状态git status
查看⽇志git log
检出代码git checkout
重置代码git reset
恢复进度git stash
⾥程碑git tag
回滚操作git revert
获取(不合并)git fetch
合并操作git merge
获取并合并(fetch+merge)git pull
rebase命令(可以处理冲突和合并提交)git rebase
上⾯常⽤的命令都已经写出来了,在真正进⼊正题之前,我们先简单说⼀下git版本管理的三个存储代码的地⽅,其中有⼀个⼯作区,就是我们写代码的地⽅;第⼆个是暂存区(Index),听名字就知道是暂时存储代码的地⽅;还有⼀个是版本库,就是我们本地提交代码后代码存储的地⽅,也是向远端仓库提交代码的地⽅。在后⾯的讲解中会经常遇到HEAD,git是⼀个⽀持多分⽀的代码管理⼯具,HEAD头指针只要不是处于分离头指针状态(分离头指针是指它指向的是⼀个具体的commit ID),那么就会指向其中某⼀个分⽀,⽽这⽴的某⼀个分⽀可以理解为master分⽀,master分⽀的指针会指向最新的提交ID。其实HEAD就可以理解为⼀个游标,在所有分⽀之间灵活切换,但是指向的是当前分⽀的最新提交。
我们⽤AndroidStudio建⽴⼀个项⽬名字为Git的项⽬来举例说明这些命令的作⽤吧,其实都⼀样,哪怕你随便建⽴⼀个⽂件夹在⾥⾯写东西也可以,主要是学习这些命令的意义和作⽤。
建⽴⼀个项⽬名字为Git的项⽬
在项⽬的根⽬录下点击右键运⾏Git bash here,使⽤git init 命令初始化git仓库,就会在⽬录下出现⼀个名字为.git的隐藏⽂件夹,接下来我们就可以对代码进⾏追踪和版本管理了。
接下来我们修改项⽬中的代码(⼤家不要担⼼,我们这个项⽬不会运⾏,因为运⾏没什么意义),⾸先看⼀下修改之前
MainActicity.java的代码,这⾥需要注意⼀个问题,git版本管理⼯具只能管理已经追踪(tracked)的⽂件,就是说没有添加(add)的⽂件是追踪不了的,这⾥我们只是使⽤git init初始化了⼀个空的仓库,上⾯
的执⾏信息也很明显说的是Initialized empty Git
responsitory。所以我们正好先了解⼀下git add命令
1.git add命令
git add 命令意义
git add .(这⾥是个点)将⼯作区的变化提交到暂存区,包括⽂件修改和新增,但是不包括删除的⽂件git add -u将⼯作区的变化提交到暂存区,包括⽂件修改和删除,但是不包括新增的⽂件
git add -A将⼯作区的变化提交到暂存区,包括新增,删除和修改的所有内容
git add -i将⼯作区的变化提交到暂存区,进⼊交互模式选择⽂件进⾏操作git add [filename]将⼯作区的变化提交到暂存区,选定某⼀个⽂件进⾏提交
为了后⾯的学习不和这⾥混淆,这⾥我先将项⽬的所有内容直接使⽤git add -A命令然后使⽤git commit -m "initial commit"提交⼀次,然后进⾏这次内容的学习,这⾥⼤家不懂的可以先这么做,后⾯就慢慢讲到。我们使⽤git log命令查看⼀下提交记录就会看到刚才的提交信息:
这时候我们开始修改代码,在MainActivity中加⼊⼀个⽅法getName();我们使⽤命令git diff查看⼀下,增加了⼀⾏代码;
这⾥有⼏个符号需要注意,其中三个减号指的是修改之前原来⽂件,三个加号值得是现在⽂件的内容,看信息很容易看出来是新加了⼀⾏代码;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
}
public void getName(){}
}
刚才说过了,其他的所有命令可以说都是为了三部曲命令服务的,这⾥的git diff命令也不例外,这⾥先对git 命令做⼀个详细的说明,就知道上⾯git diff的含义了:
git diff 命令意义
git diff⽐较⼯作区和暂存区差异
git diff --cached⽐较暂存区和版本库之间差异
git diff HEAD⽐较⼯作区和HEAD头指针指向的分⽀之间的差异
git diff [ID]⼯作区和某⼀个提交的分⽀进⾏对⽐
git diff --cached [ID]暂存区和某⼀个分⽀⽐较
所以上⾯的git diff就是⼯作区和暂存区进⾏⽐较了,我们在⼯作区加⼊⼀⾏代码,没有add,所以暂存区没有。这时候执⾏git diff HEAD效果和git diff虽然意义不⼀样,但是效果⼀样,因为代码还在⼯作区,,
既没有添加到暂且区也没有添加到版本库中,如下图:
这时候我们执⾏⼀下git status -s命令查看⼀下,显⽰如下,我们看到打印信息前⾯显⽰了⼀个⼤写的红⾊M但是没有最顶格写,它的意义有两点,第⼀M代表的是修改的意思,也就是我们是在原来基础上修改的这个⽂件,并不是新增的(因为之前有⼀次提交);第⼆红⾊以及⼤写代表是还没有添加到暂存区;等会我们添加后再来对⽐⼀下。
这时候我们将其git add -A添加到暂存区,执⾏git status -s命令:查看对⽐刚才的,这时候会发现add之后,执⾏git status -s命令,⼤写M顶格写了,⽽且颜⾊也变为绿⾊的了,这就给了我们⼀个好的启⽰,因为执⾏git diff可能信息量太⼤,那么我们就可以执⾏git status命令查看,不仅知道哪个⽂件修改了,⽽且还知道是否添加到暂存区了。
这时候执⾏git diff会发现没有变化了,但是执⾏git diff --cached和git diff HEAD有变化,因为修改已经提交到暂存区,⼯作区和暂存区⼀致,但是没有提交到版本库中,如下图:
好了,git add命令讲解就到这⾥。下⾯我们讲解git commit 命令。
2.git commit命令
现在我们将修改已经提交到暂存区了,下⼀步就该提交版本库了,需要使⽤git commit命令
git commit命令|意义
-|-
git commit -m “msg”|将修改从暂存区提交到版本库中,msg指的是本次提交的信息
git使用详解git commit --amend|修改上次提交的信息,会出现⼀个交互界⾯,相当于本次提交和上次提交合并为⼀个提交
git commit --amend -m “msg”|修改上次提交的信息,不会出现⼀个交互界⾯,相当于本次提交和上次提交合并为⼀个提交git commit --allow-empty -m “msg”|看意思就是说允许空⽩提交,多⽤来测试时候使⽤
了解了以上命令的意思,我们就直接使⽤⼀下吧,git commit -m “add method getName()”,如下:查看⼀下log信息
这⾥也将git log的命令展⽰出来:
git log命令意义
git log展⽰commit的详细信息,包括commit SHA1值,date author和提交信息
意义
git log命令
git log --oneline仅仅展⽰提交的简单信息,有SHA1值前⼏位,和提交信息
git log --graph⽤图表链的形式详细展⽰提交信息
git log --oneling --graph⽤图表链的形式简单展⽰提交信息
3.git push
git push命令意义
git push origin [branch]将代码提交到远端branch分⽀上
git push origin [brchan] -f将代码覆盖远端的branch分⽀,此命令⽐较危险,慎⽤,确保此分⽀只有你个⼈⼯作时候可以
最后就是提交了,假如是真正的项⽬的话,使⽤git push origin [branchname]就可以提交了。默认情况下,如果你是从远端clone来的代码的话默认是远端的master分⽀,这个得根据项⽬的实际分⽀模型,也可能是develop分⽀,假如是develop分⽀clone来的话就可以使⽤git push origin develop来将版本库代码push到远端建⽴⼀个新的分⽀,等别⼈review后没问题,就可以合并到主分⽀了,这⾥我们push
肯定是不会成功的。显⽰不能从远端仓库读取,如下图:
如果想测试的话,可以在建⽴Git项⽬的时候就先把项⽬VCS->Import into Version Control->share Project on GitHub,这样的话就在远端有⼀个引⽤指向当前的项⽬,就可以push成功了。这⾥因为push⽐较简单,主要是说明其他⼀些命令的使⽤,但是push命令很重要,切记不要随便使⽤-f命令。
好了,今天的交流就结束了,还有很多重要的的命令,⽐如rebase checkout reset revert等,我会在后⾯的博客中慢慢写出来,如博客中有不对的地⽅,欢迎斧正。
除了这基本的三部曲,在此基础上还有其它的必须掌握的Git命令,请参考:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。