Git:将旧提交合并到当前头版本中

Noe*_*oel 18 git merge

得到一个文件,它有两个感兴趣的提交,都在Master分支上,都只修改一个文件foo:先前的提交AA,以及当前的版本HEAD.我想合并的文件的两个版本,保留两个位,为HEADMaster.

我做了一件我觉得最简单的事情:

git checkout -b merge-purgatory AA
git commit -m "pulled foo back from previous commit for merging into HEAD."
git checkout master
git merge merge-purgatory
Run Code Online (Sandbox Code Playgroud)

它只是会覆盖当前HEAD的版本fooAA版本.尝试更详细git checkout -m,同样的结果:愚蠢的覆盖.

如何强制git将AA版本foo视为与当前HEAD版本冲突的合并?

Mar*_*air 17

如果git的合并没有做你想要的,你可以改为:

  1. 确保文件中没有未提交的更改foo,例如确保git status清洁.
  2. foo使用以下版本覆盖AA:git show AA:foo > foo
  3. 选择性地仅根据foo您的需要进行更改:git add -p foo
  4. 放弃所有的其他更改foogit checkout -- foo
  5. 承诺分阶段的变化: git commit

或者,如果您更喜欢使用图形差异工具(例如meld),您可以这样做:

git show AA:foo > old-foo
meld old-foo foo
Run Code Online (Sandbox Code Playgroud)

  • 基本上,只需绕过git对先前提交的了解并使用手动合并/合并工具.希望从git中获得更加强烈的行为,但这很简单,我成功地使用了它,之后只是进行了一些清理.谢谢! (3认同)

Mah*_*hir 7

我使用以下方法摆脱它:

git checkout -f b855a13754fabf5cef6ff93ab00558608a839377 -- .

这将提交 id 的更改强制到我当前的分支(master)中,然后我checkout -b根据这些应用的更改创建了一个新分支 ( ),并从后者创建了一个合并请求。

以上都不适合我:-(