初学git的时候总是会有这么2个问题:
- origin是什么?fetch 和 pull, push 和 commit 到底什么区别?
- push reject?
- 合并分支怎么回事?冲突了怎么办?
本文就是基于我的git使用经验来聊聊这2个问题
问题1:origin是什么?fetch 和 pull, push 和 commit 到底什么区别?
先附上图片一张
由图中可以看到本地其实有2个类似仓库的概念的东西
你每一次fetch,其实只是把远程服务器上的内容拉到你本地remotes下
再说origin
:
origin
是本地对远程仓库的默认别名
我们执行git remote -v
查看设置
这个配置就能说明,我们执行git fetch origin
的时候就会去git@github.com:your_name/your_repertory.git
获取最新的远程代码。
同理push也就是把代码推到git@github.com:your_name/your_repertory.git
我们可以使用git remote rename origin rpo
添加多个远程仓库
这个时候输出就会如下
由此可以看到origin
只是你clone时,git添加的默认远程分支,你可以改它名字为任何名字,并不会是很多刚接触时,认为必须origin不可的概念。
push 和 commit
很多刚开始使用git的同学,都不太明白commit后为什么还要push
其实看上图可知commit只是修改了你本地的一个仓库内容,最后push才是完成推送到远程的一个动作(同时也会更新你本地的remotes)
所以,大家其实可以情景的在本地commit或其他操作,只要不使用push,完全不用担心远程仓库被搞坏。
fetch 和 pull
记住一个概念 pull = fetch + merge
,相信你就不会有问题
问题2: push rejected??push 失败
|
|
其实只是一个很常见的问题,当你们多人在同一个分支上合作开发的时候,你想要push到远程,然而在你之前另一位同学A,push了一个新的上去,此时你的remotes里的就不是最新的了,git不知道你的是对的,还是A同学的是对的,所以他就把后面的提交拒绝了,你也就收到了这个报错。
此时,我们只需要按提示的进行git pull(或者,推荐 git fetch 最新的在手动使用 rebase/merge 等操作),把A的更新到你的本地分支上,就可以成功的push了
问题3:冲突了怎么办?
其实这个教程非常的多,只是要切记冲突处理完前,请不要做切换分支等操作,正常的处理好冲突,如果无法处理时,使用abort取消才是正确的方式