rlk*_*024 4 git branch branching-and-merging git-branch
我们称之为亚伦的一位同事被指派翻新一个网站的一个部分作为一个长期项目.他创建了一个名为的新Git分支aaron.他所有的改变都是在这个分支上进行的.在他工作的同时,我继续维护整个网站,对我做出改变master.
最终,亚伦将他的分支合并到了master.这以某种方式还原了我master在合并时和aaron首次创建分支之间所做的所有提交.如果我打字git show <hash of merge commit>,我可以看到当Aaron在他的分支上工作时我改变的每个文件的差异.这些差异显示了我所做的每一项改变的回归.如果Aaron手动将其分支上的每个文件的内容复制到master并提交更改,它看起来就像是这样.(他没有这样做.我只是想说明日志显示的内容.)
根据亚伦的说法,他没有做任何奇怪的事情.他说他刚跑了git pull origin/aaron.
可能是什么导致了这个?是否有可能git pull origin aaron将我的所有更改都还原为master?
此外,是否有一种简单的方法可以将我的更改恢复到master而不还原他的所有工作?
编辑1:
其中一个已更改但在master合并后还原的文件是foo.txt.所以我这样做了:
git checkout aaron
git log foo.txt
Run Code Online (Sandbox Code Playgroud)
日志并不能反映任何变化foo.txt的时刻之后aaron分支产生.我有点期待在aaron分支的日志中看到我的更改的恢复,但我没有.那么,这最终证明亚伦做了一些其他事情而不是他声称做过的简单拉动吗?
编辑2:
我曾经说过他打字origin/aaron,但他确实打字了origin aaron.我已经改变了它.
编辑3
根据下面的建议,我选择通过重写历史来解决这个问题.我在这一点上确信这个问题是由一个误导的解决冲突的企图造成的.
对于只有这样git pull origin/aaron做,这是他已经从合并master成aaron第一,丢弃所有的变化master(比如用git merge -s ours master).
去检查历史.是否有不同于以往任何合并master成aaron?它们会丢弃master变化吗?如果没有,那么唯一的解释是,他并没有跑git pull origin/aaron.
至于恢复更改,您可以退出他的合并并自己重新创建它.这将改变历史,但如果你对此感到满意,那么这是最简单的解决方案.如果你对此不满意,那就会变得稍微复杂一些.在这种情况下,您将需要创建一个临时分支,退出他的合并,并正确地重新合并.然后回去掌握并运行git read-tree tempbranch.这将使用临时正确合并[1]的结果更新您的索引,然后您可以提交它.
[1]:注意,这不会修改你的工作树,因此你需要用类似的东西来跟进git checkout -- ..
| 归档时间: |
|
| 查看次数: |
928 次 |
| 最近记录: |