项目克隆到本地一以后,我进行了二次修改,在test1,test2文件里,各增加一行代码, 并且新建了readme文件,写了一行字,如图所示。修改后提交到本地仓库。
在我将本地更新push到github远程仓库之前, 有同事已经push了他自己的提交(他的提交也是创建了readme文件,但是文件内容和我不一样)。那么我此时push, 是留他的内容还是我的呢?显然就有了冲突,于是就需要用到rebase操作
我们先将Github远程仓库,fetch, 也就是更新下本地的远程仓库副本,也就是拷贝一份远程仓库到本地(注意不是更新本地master分支)
你可以比较本地的远程仓库副本和本地的master分支。
左边的base version是我的,右边的是本地远程仓库副本的内容(也就是同事提交的),我们俩内容不一样
下面将本地的远程仓库副本和本地的master进行合并,
很显然,会提示如下的冲突。到底是选我的,还是留同事的,系统不知道如何处理这个问题,把选择权交给了你。Accept Yours: 留你自己的版本,Accept Theirs: 留别人的版本。你也可以双击框里的冲突文件,会跳出对话框,你可以手动自己修改出一个结合版。等你改完,就可以push到远程仓库了。我这里选择留我的版本。
pycharm左下角版本控制的log, 可以看到,是一条直线(这是rebase的优势,可以保持树很整洁)
我们查看github远程仓库验证,发现readme.md是我的版本内容
问题一:为何不能直接push, 会怎么样
会push失败
问题二:
我明明看到还有merge,为何要用rebase? (关于rebase, 很多知识,自行搜索资料学习)我这里演示下用merge什么效果
我又给所有代码增加一行,提交了修改,还没来及push.
我再次git fetch了远程仓库到本地远程仓库副本。pycharm左下角查看版本控制的log,发现有一个update readme.md的提交,意味着有同事又修改了readme.md文件。此时我push, 选择merge
像预期的那样,有冲突了,怎么办呢?我不要你觉得,我要我觉得,我选我的版本!
解决完成冲突后,我们查看pycharm左下角的Version Control的log
这个紫色的线是怎么回事?有点晕。。。之前的rebase不是一条直线吗。仔细看,紫色的线上有一个点,显示Update readme.md, 这是我同事提交的。merge其实产生了新的提交,记录合并的操作。
区别来了:用rebase就不会产生新的提交,整个树是呈直线的,以后进行版本控制,会轻松许多。