补丁在合并后未应用

时间:2015-02-09 19:59:06

标签: git merge patch revision-history

使用git flow工具,我创建了一个功能分支(分支dev),进行了一系列更改,并将分支合并回dev

我在功能分支中修改了一个文件。我可以确认修改文件(REV-A)的修订版(让我们称之为FILE-A)存在并应用于要素分支。

但是,在合并之后,FILE-A处于dev分支上的原始(合并前)状态。我在REV-Agit log时可以看到dev,如果我按照git log --graph生成的行,我可以将此提交跟踪到我合并的合并提交我的功能分支dev

但是,当我执行git blame FILE-A时,提交不存在,并且相关的行位于其原始(REV-A提交前)。

此外,git show REV-A | patch -p1会导致应用程序干净利落。之后,git diff看起来与git show REV-A相同。

发生了什么?合并如何将修订引入分支历史记录,但实际上并未应用它?该合并是否有任何其他变化尚未应用???

2 个答案:

答案 0 :(得分:2)

如果合并结果中似乎缺少某些更改,那么首先,根据我的经验,您需要问的唯一问题是git diff是否将它们显示为合并基础和分支提示之间的更改。问一下:

git diff $merge^1...$merge^2 -- FILE-A  # `$merge^2` was `feature` as of the merge
                                         # `$merge^1` was `dev`

上面的三点语法特定于差异,每个人至少有时想看看帅哥合并为分支所看到的变化。

如果更改未显示在输出中,那么REV_A更改将在REV_A和合并之间的某些提交中恢复,无论是通过先前的合并(到任一分支),在这种情况下,您可以再次询问有关该合并的相同问题,或直接通过某些等效的git revert提出问题。

如果输出中出现 do 更改,那么由于patch会干净地应用这些更改,因此在该合并中手动还原了更改。

答案 1 :(得分:2)

你还有你跑的命令吗?这有助于追踪事情可能出错的地方。我不禁想到,这个功能不能正确“完成”。你能确认你输入了git flow feature finish my_feature吗?

我使用下面的命令模拟了一个功能,但没有遇到您描述的问题。如果你的步骤偏离了我的步骤,那么比较一下如何以及在哪里都会很棒。

MBP:git-test acanby (master)$ echo "Original Code" > file.txt
MBP:git-test acanby (master)$ git commit -am "First commit"
MBP:git-test acanby (master)$ git flow init
MBP:git-test acanby (develop)$ git flow feature start my_feature
MBP:git-test acanby (feature/my_feature)$ echo "New feature here" >> file.txt 
MBP:git-test acanby (feature/my_feature)$ git commit -am "Feature change"
MBP:git-test acanby (feature/my_feature)$ git flow feature finish my_feature
MBP:git-test acanby (develop)$ git blame file.txt 
  ^d96c279 (acanby 2015-02-16 20:36:22 +1100 1) Original Code
  62a38725 (acanby 2015-02-16 20:38:37 +1100 2) New feature here
MBP:git-test acanby (develop)$ git log --oneline
  62a3872 Feature change
  d96c279 First commit

使用这些命令,我​​可以使用git-flow工作流完成一项功能。

如果您正在了解有关git-flow工作流程的更多信息(特别是命令及其执行的操作),那么可以使用一个很好的备忘单here