【发布时间】:2018-03-08 05:44:10
【问题描述】:
我最近创建了一个分支,branchA 关闭了 master 来开发一个功能。在开发此功能时,其他提交被推送到master。我想将这些更改带入分支,所以在branchA 中,我运行了
git merge master
然后我在此基础上进行了更改 (B)。但是,后来我意识到我将master合并到分支中很糟糕,所以我恢复了提交使用
git revert [hash of merge of master in branchA] -m 1
然后我重新应用了 B 的更改,并提交了它。最后,我将master 重新合并为branchA。
我对这次合并很满意,所以我想将 branchA 的更改带入 master。令我惊讶的是,更改已经在master 中。当我检查出主人并运行时
git merge branchA
我看到了
已经是最新的了。
这里发生了什么?
我来自 SVN 背景,所以我预计需要将 branchA 合并回 master,但似乎这似乎是自动发生的?这种行为是否与快进有关?如果我不希望这种行为发生(例如,将更改从 master 拉入分支,而不会让分支中的更改溢出回 master)。
提前致谢!
【问题讨论】:
-
你已经将你的分支推送到远程了吗?还是仅限本地?
-
@Anonymous:我根本看不到那个。如果你在看“Merging master into the feature branch”的图片,认为这说明你理解错了:master的tip在你merge到你的feature分支时根本没有变化,你只是带过来变化。当另一个更改提交到主分支时,它仍然不会有来自功能分支的更改。
-
好吧,我开始明白我做错了什么。在我推送合并的分支之后,我显然不小心通过 GUI 将分支合并到了主干中(我第一次使用 GUI,所以我一定是点击错误)并提交了它。因此,当我去命令行将分支合并到主干时,无事可做。我很困惑,因为当我转到 GUI 的历史可视化时,它显示 master 的最后一次提交与分支的最后一次提交相同(将 master 合并到 branchA),让我认为它以某种方式发生了自动地。 PEBCAK!
-
@Anonymous:是的,快进“合并”实际上根本不是合并。当合并的目标(您请求合并的提交)严格高于当前(HEAD)提交时,就会发生这种情况。如果没有
--no-ff,git merge会自言自语:啊哈,我可以在不实际合并的情况下做到这一点,我所要做的就是移动这个分支,然后将HEAD向前移动并检查另一个提交!
标签: git version-control merge revert