我已经将一个分支合并为主人:
git checkout master
git merge work_branch
我解决并承诺了一些冲突,但是有些变化没有发现,我无法弄清楚原因。
如果我git checkout work_branch
我可以看到文件views.py
与master
不同,但如果我git merge work_branch
master
,我会Already up-to-date.
master
1}}这里发生了什么?我希望work_branch
与{{1}}相同。
答案 0 :(得分:1)
在你合并之后,假设你有。
A -- B -- C -- F
\ /L master
\- D -- E--/
L work_branch
如果您的提交B
更改views.py
,并且您未在work_branch
上更改,那么
E
和F
之间)work_branch
没有意义,因此Already up-to-date
。如果您希望master
与work_branch
完全相同(例如:像提交E
),您可以在回购的根目录下执行
git checkout master
git checkout work_branch -- .
git commit --all
编辑后续评论:
另一方面,如果你只改变了提交views.py
中的E
(即:B
上也没有C
),那么似乎很奇怪E
和F
上的文件不一样。
如果您没有推送/共享合并提交,则可能需要重试合并,以防先前发生操作错误:
git checkout C
git branch -f master
git checkout master
git merge work_branch
答案 1 :(得分:0)
我认为您不熟悉Git工作流程。
您可能尚未在work_branch
中投放。确保您已在work_bench
中提交了作品。
解决冲突后,请确保您git add views.py
之前git commit
或git commit
只-a
选项(我总是忘记这样做)
如果你帮助你做了一切正确的事情,我想我需要知道你的回购日志,看看确实发生了什么。
答案 2 :(得分:0)
git merge
在您所在的分支和您合并的分支之间执行三向合并。这意味着,粗略地说,git:
master
和work_branch
; master
之间生成差异,并在祖先和work_branch
之间产生差异。这些差异描述了在每个分支上完成的工作。work_branch
中与master
上的差异不冲突的每个差异。因此,在分支中合并不会使您与其合并的相同的分支,它会为您提供一个新的状态,其中包含所有工作双方。
如果你真正想要做的是让一个分支与另一个分支相同,你可以(当你master
签出时):
git checkout work_branch -- .
使您的工作副本完全处于work_branch
中的状态,并提交这些更改。 (您也可以为单个路径或目录执行此操作)。这将在master
的现有历史记录中创建一个新提交,引入更改以使其相同。或者:git reset --hard work_branch
时使用master
。这会将master
的历史记录替换为work_branch
。答案 3 :(得分:0)
由于您之前注意到git reverted
,我认为您正在与合并和还原之间的交互相冲突。 git revert
通过创建一个新的提交来工作,该提交准确地撤消了恢复的提交。例如,假设您有以下树。
A -- master
| B -- work_branch
| |
| /
M -- Merge work_branch to master.
|
C -- New commit on master.
|
M' -- git revert M (undoes B)
在这种情况下,您将work_branch
合并到master
,然后在合并之前向master
提交新内容,然后确定work_branch
尚未准备好master
{1}}。您现在有几个选项可以解决此问题。
git reset --hard
返回提交A
,然后git cherry-pick C
返回master
。git rebase -i
返回A并删除提交M
git revert M
创建了提交M'
前两个选项基本相同,只是有不同的工作流程。最后一个选项会在您的历史记录中同时显示M
和新提交M'
,其中M'
包含完全撤消在创建{{1}的合并期间带来的所有内容的更改}
当您确定M
现已准备好并且您想要合并它时,就会出现问题。当您执行合并时,work_branch
中的work_branch
发生的任何更改都不会被M
撤消。要获得更改,您必须删除提交M'
对您的历史记录的影响。您还有两个选项,它们基本相同,但现在您尝试删除M'
。
最简单的做法很可能是恢复还原提交。在再次合并M'
之前git revert M'
。这也可以在重新合并work_branch
之后起作用,但它可能会导致您以前执行此操作时无法获得的冲突。这将使你得到类似的东西:
work_branch