如何优雅并且安全的使用git(一)
准备工作,我建了一个项目,里面有两个文件,其中ILuckyData.java是daizhen256这个账号一直在维护,ILuckyData2.java是ppzhen这个账号一直在维护。
测试情况1:daizhen256(以下简称A)这个账户修改这个文件并提交后,ppzhen(以下简称B)这个账户去更新
这里在【未暂存的文件】中,选择你要提交的文件,这是最好在右侧看看差分,如果确保文件都无误之后,点击stage All
所选择的文件就跑到了已暂存文件中去了,这相当于命令行中的git add吧
这个时候就可以提交了
提交要记得写注释,要不然出了问题你哭都来不及,这时就相当于命令行的git commit,如果你这时候点击了下面的立即推送,则相当于紧接着执行了一遍git push,这样你的修改就保存到了github上了
这时候B来上班了,他首先要更新下本地的代码库,B这个人不用GUI工具,一直用命令行
git更新代码有两个命令,一个是git fetch另一个是git pull。区别在于前者相当于是从远程获取最新版本到本地,不会自动merge,后者 相当于是从远程获取最新版本并merge到本地,所以一般来讲咱们用前面的就可以,但是分情况吧
还是刚才的例子,这个时候A又提交了一个新的文件,我就不截图了,我们来看看B这边的命令行怎么显示:
看吧,git fetch执行完了,但是本地没有变动,其实它是更新到了本地的暂存区啦。这时候我们通过命令就可以看差分啦,来吧 git log -p master..origin/master
好多文字,看着眼晕,所以我不建议用命令行。不过用于A君和B君商量好了,没有冲突的文件,所以B其实就可以直接 git merge origin/master了,这样的话代码就被更新到本地了
git pull就相当于执行了git fetch和git merge,没什么特别的
测试情况2:B这个账户修改这个文件并提交后,A这个账户去更新
使用GUI工具有一个坏处就是好多个生僻的命令点下鼠标就解决了,这样就极大的增加了出错的概率,所以 一定要切记,不知道的按钮不要乱点!
这时候B同样也是修改了一个文件新添了一个文件并且把刚才A新添的那个文件给删了,我们默认B已经git add git commit git push完了
我去,这么智能?竟然认为我执行了一遍重命名?可能是文件完全一致的缘故吧
回到A这儿,A打开工具,工具自动就知道了本地代码的版本比服务端旧了一版
注意 一点
这个R表示这个文件被改了名字,同时文件也不一样,差分能看出来了
我们按照提示点击拉取就可以了,注意拉取就是pull,获取是fetch,我们先试试fetch
点击确定,执行成功,本地没变化,看来我们在打开程序后程序默认就定时执行了一遍fetch,好贴心啊
这次点击pull
注意红框里面的,这次 咱们先不点,直接确定 ,好了,本地这就更新完毕了
测试情况3:这个情况也属于正常的情况,A和B同时进行项目,但是修改的文件不是一样的,A同志先提交,没有push,B同志也提交到本地了同样也没有push,看看会有什么效果,其他的图就不截了,浪费流量
假设A和 B都提交完了,这时候看A的界面
可以看出来有文件没有被推送,不过超前一个版本是啥意思?应该就是没提交的意思,我点下fetch看看啥效果:没效果,因为B还没有push。就在这一刹那,A提交了……
看看B再push就报错了,很明显,它让更新吧?那我就git pull了。
成功了,皆大欢喜。由此可见,如果服务器里有没有更新的文件,他就不让你push!
这个时候A再看一下界面,fetch一下,结构树就变成这样了:
提示有两个需要拉取的,不要害怕那个落后2个版本的提示,直接拉取即可
可以看得出来,master是本地的master版本,origin/master是服务器的master版本,经过我们pull之后,这两个branch版本就 一致了~
测试情况4:A和B同时修改了一个文件,B先提交并且push了
准备工作做好后,A再想push,就会报错啦
冲突了,它让先fetch,这时候记得不要pull,因为他会自动merge,把你的修改和别人的修改就混在一块了,如果修改比较多的话很难拆开,切记切记!
fetch完后,再来看A的界面,里面显示出,本地master和远程的master不一致了,本地的单独起了一个分支
这次我选了合并,在那个服务器的分支上,提示我这个
他让我自行解决冲突,同事可以看到本地有一个未提交的更改了
不要担心这时候文件会被改,这个时候只需要你再未暂存的文件或者已暂存的文件里按右键选择解决冲突,用第三方工具,这时候就会打开我预先配置好的bc去进行差分,bc很给力的
这里可以看到三个版本,一个是本地 提交过得版本,中间的是本地提交之前的版本,第三个是远端服务器上的版本
这个时候选择相应的代码 进行merge就行了,合并完保存关闭就可以了
需要注意的是,使用bc之后本地 工作空间会出现一个临时文件,在文暂存的文件区里,这里不用管它,直接删掉即可
最后还需要在add一下,然后commit push就可以了,这时候我们再来看界面
commit时的描述都已经自动写好了,很智能吧~

浙公网安备 33010602011771号