pull命令
在《Git之不明觉厉4》中我们克隆了仓库,并且学会了在分支上工作,现在我们把本地的改动推送到远程吧。这边因为需要合作,我们假定一个工作场景吧:有两位技师分别叫小熊和小虎,她们都克隆了仓库https://github.com/benhaben/gittest.git
假定情况是这样的:
- 现在小虎创建了新的文件tiger.txt并推送到远程。
- 现在我们看看小熊增加文件并进行push操作会怎么样。
我们看到push被拒绝了,而且git给出了提示,说有人推送过了,你应该先合并远程的改动。那么我们调用pull试试看(先把上面增加的文件清理掉,保证小熊的仓库是干净的,可以用status查看)
echo "you are my bear" > bear.txt
git add -A
git commit -am "add bear.txt"
git push
我们可以看到这词成功了。
理解pull命令
pull命令和调用下面两个命令效果是一样的。
git fetch
git merge origin/master
- git fetch:导入远程的commit
- git merge origin/master :合并远程分支到当前分支
看一下图吧:
-
调用fetch之前
-
调用fetch后
-
合并
合并冲突
现在我们把情况弄的复杂一些:
- 小熊小虎的状态都是干净的(
git status
) - 小虎的readme.txt里面写上‘我是小虎’,并push到远程。
- 小熊的readme.txt里面写上‘我是小熊’,提交尝试推送,我们会发现推送失败
-
小熊pull,发现pull也失败了,全来是有冲突
-
我们调用git status查看状态,发现readme.txt是unmerged状态
-
我们用编辑器打开一下看看,上面是我们的改动,保留,下面的改动是队友加的,我们也保留吧,删除特殊字符
- 保存我们修改过的文件,调用
git commit -a
命令去提交改动
这个时候会弹出一个编辑器,让我修改commit的信息,这里我就用默认的信息了。直接保存退出对话框。
- 调用
git status
,可以看到我们有两个commit可以push到远程
下图可以看出我们做了一个3-way merge, 不知道两种merge的话,可以看前面的文章。
- 这时候我们可以push了
大功告成,现在解决冲突我们也能搞定了。上面有写地方弹出了vim编辑器,如果不喜欢可以配置成别的,另外合并冲突也可以使用一些工具,比如beyond compare。这些工具会大大加速我们的开发效率哦。