Jas*_*son 16 git version-control merge
所以我的一个同事意外地进行了合并,实际上只保留了树的一面.于是他开始合并,删除了合并引入的所有更改,然后提交了合并.
这是我在测试仓库上做的一个简单的测试用例.这个回购有三个分支.idx是意外合并的主题分支,master是主线.dev只是测试revert -m如何工作,所以你可以忽略它.

我想要做的是恢复错误的合并.所以从主人我尝试运行,git revert -m 1 <sha1sum of faulty merge>但然后git响应:
# On branch master
nothing to commit (working directory clean)
Run Code Online (Sandbox Code Playgroud)
所以它实际上并没有创建撤消合并的恢复提交.我相信这是因为合并实际上并没有包含任何真正的变化.
如果你想玩我的测试报告,你可以从这里下载它
这是一个git bug,还是我错过了什么?
这里最好的经验法则是永远不要在公开后改变你的回购历史.这真的搞砸了.我不认为这种情况可以避免它.
我认为这里有几个选项,但最简单的是做一个rebase.使用你的repo,这些是我使用的命令:
git rebase -i ead3646
Run Code Online (Sandbox Code Playgroud)
然后,当交互式shell出现时,删除错误提交的整行.保存,你应该结束这样的新历史:
* f0ab6d5 more normal work on dev
* ebb5103 idx commit
* ead3646 master change
* 582c38c dev commits
* f4b8bc6 initial commit
Run Code Online (Sandbox Code Playgroud)
让你们两个(和其他人)重新同步将需要一些分支,推送,电子邮件和午餐购买.
git文档说明了关于恢复合并:git/Documentation/howto/revert-a-faulty-merge.txt 虽然这主要是关于恢复导致错误更改的合并,而不是恢复错误地完成的合并.
基本上,恢复合并将撤消数据更改,但不会撤消历史(图形)更改.因此,预计恢复错误的合并不会做任何事情.
处理此问题的一种方法是再次进行合并,然后将其结果合并到master中.在您的示例中,这可能是:
git checkout -b temp/merge-fixup ead364653b601f48159bca5cb59d6a204a426168
git merge 2fce9bfe8f721c45ea1ed5f93176322cac60a1d9
git checkout master
git merge temp/merge-fixup
git branch -d temp/merge-fixup
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12468 次 |
| 最近记录: |