在开始喷出git命令之前,我使用Windows 7-64bit和TortoiseGit(目前为v1.7.11.3),因为我是Git的新手。
我的DEV分支比当前远程主分支旧,我更新DEV,并解决冲突
DEV分支已将提交推送到远程DEV分支,因此rebase
是不可能的 - 据我所知。
为什么会发生这种情况,我该如何避免呢?
Checkout master
(切换到本地主人)Pull origin master
(无冲突)Checkout DEV
(切换到dev分支)Merge master
(将本地主更改应用到本地DEV分支)commit
已修改的文件(自动合并和修复的冲突文件)当我打开log
时,我会看到提交窗口中的“父1”文件和未显示的“父2”文件。这是奇怪的部分,(本地/远程相同)主人已删除的文件现在已添加,新文件已删除。<登记/>
此外,“父2”文件没有产生任何冲突,尽管有一些应该!
新/已删除的文件与我的预期相反。那是为什么?
如果一个文件是master中的新文件并且我合并到DEV分支中,那么我希望它在合并后存在
我的猜测是DEV分支被认为是主分支,而不是分支(主分区)我合并到DEV。
我没有选择使用Revert
来重新创建已删除的文件(那些在master中实际上是新的文件)。
答案 0 :(得分:2)
我看到你的合并方向不正确:
你应该这样做:
git checkout master
git pull origin master
这里有两种变体:
1)如果您不想在遥控器上重写开发分支历史记录,那么您必须保持原样但要做到
git merge dev # will produce merge commit if not fast-forward
2)或者如果你不太关心dev分支历史
git checkout dev
git rebase master # now all commits that happened in dev will be "on top" of master, master will be behind
git checkout master
git merge dev # will result in fast-forward merge without merge commit
现在为了回到故障合并之前的状态你可以做(如果合并是你在dev分支中做的最后一件事):
git checkout dev
git reset --hard HEAD~1
现在您可以正确合并。在第二种情况下,除非你使用-f标志,否则大多数时候将dev分支推送到远程开发将被禁止为非快进。希望有所帮助。