【问题标题】:Getting merged code "right" with Git使用 Git “正确”合并代码
【发布时间】:2014-01-16 13:21:42
【问题描述】:

我刚刚通过合并 FETCH_HEAD 并获取我最近的更改而不是他的更改来覆盖我的同事代码。我想恢复到合并之前,然后进行合并,强制他的更改在他接触文件的地方被接受,但在没有任何其他更改的地方得到我的合并。

我的 git 日志(使用 l2* 创建)现在看起来像这样:

*    3f6308d - (HEAD, master) Merging changes (confliect in PriceListForm.java.. was a formatting change only (Sun Dec 29 09:07:27 2013) <Gre
|\  
| *  283c00c - Changing wv reports to be separated by changes in prices according to received_date rather than lab_number. (Thu Dec 26 19:39:
| |
| *  4846bf2 - Merge branch 'master' of ssh://git-pacce@free1.projectlocker.com/pcs.git (Wed Dec 25 17:49:19 2013) <jpjones>

当我执行合并时,这些文件中没有任何冲突,它只是接受了我的更改,而不是 jpjones 最近的更改。

基本上我想重做3f6308d,但允许 jpjones 更改优先。 This StackOverflow Answer 似乎与我想要实现的目标相关,但我不确定,希望得到一些澄清。

* git l2 is alias l2 = log --graph --all --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cd) %C(bold blue)<%an>%Creset' --abbrev-commit --date=local

【问题讨论】:

    标签: git merge git-merge


    【解决方案1】:

    考虑到您尚未推送错误提交,您可以安全地将 HEAD 重置为之前的提交:

    git reset --hard HEAD^
    

    (确保您没有正在进行的工作,例如私有文件或添加到索引的文件,因为工作树和索引都将重置为HEAD^ 状态)

    这就是answer you mention 的建议。

    但在那之后,您需要确保您的同事的更改在您即将再次执行的合并期间进行。
    看看theirs "merge strategy option" 是否效果更好。

    git checkout yourBranch
    git merge -X theirs theirBranch
    

    但是,我怀疑它仅适用于解决冲突(文件中的并发修改)。
    如果您最近进行了更改,这些更改仍会在生成的合并 HEAD 中。

    如果是这样,请尝试遵循 this answer 中的配方,这会强制合并到您的分支,然后将 yourBranch 重置为 theirBranch,然后再将 HEAD 移动到之前完成的合并提交。
    然后最终结果应该看起来像你所追求的。

    【讨论】:

    • 这并不能完全解决我的问题,但它回答了问题,我将来肯定会做不同的事情。现在的问题是,正如您所期望的那样,“他们的”策略并不完全适用于这种情况,我们正在将所有内容都提交给 master(没有主题分支)
    • @Greg 我怀疑我最后提到的stackoverflow.com/a/4969679/6309 应该更准确。
    • 一切都在master上,所以在这种情况下,使用不同的分支来合并对我来说没有意义。我不确定我是否可以对修订而不是分支做同样的事情。
    猜你喜欢
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多