使用git flow
工具,我创建了一个功能分支(分支dev
),进行了一系列更改,并将分支合并回dev
。
我在功能分支中修改了一个文件。我可以确认修改文件(REV-A
)的修订版(让我们称之为FILE-A
)存在并应用于要素分支。
但是,在合并之后,FILE-A
处于dev
分支上的原始(合并前)状态。我在REV-A
上git log
时可以看到dev
,如果我按照git log --graph
生成的行,我可以将此提交跟踪到我合并的合并提交我的功能分支dev
。
但是,当我执行git blame
FILE-A
时,提交不存在,并且相关的行位于其原始(REV-A
提交前)。
此外,git show REV-A | patch -p1
会导致应用程序干净利落。之后,git diff
看起来与git show REV-A
相同。
发生了什么?合并如何将修订引入分支历史记录,但实际上并未应用它?该合并是否有任何其他变化尚未应用???
答案 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。