Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 合并后未应用修补程序_Git_Merge_Patch_Revision History - Fatal编程技术网

Git 合并后未应用修补程序

Git 合并后未应用修补程序,git,merge,patch,revision-history,Git,Merge,Patch,Revision History,使用gitflow工具,我创建了一个功能分支(分支出dev),进行了一系列更改,并将分支合并回dev 在要素分支中有一个我已修改的文件。我可以确认修改文件(file-A)的版本(我们称之为REV-A)存在并应用于要素分支 但是,合并后,FILE-A在dev分支上处于原始(预合并)状态。当我在dev上执行git-log时,我可以看到REV-A,如果我遵循git-log--graph生成的行,我可以将此提交跟踪到合并提交,在合并提交中我将我的功能分支与dev合并 但是,当我对FILE-a执行git-

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

在要素分支中有一个我已修改的文件。我可以确认修改文件(
file-A
)的版本(我们称之为
REV-A
)存在并应用于要素分支

但是,合并后,
FILE-A
dev
分支上处于原始(预合并)状态。当我在
dev
上执行
git-log
时,我可以看到
REV-A
,如果我遵循
git-log--graph
生成的行,我可以将此提交跟踪到合并提交,在合并提交中我将我的功能分支与
dev
合并

但是,当我对
FILE-a
执行
git-bull
时,提交不在那里,并且所讨论的行是它的原始行(pre
REV-a
commit)

此外,
git show REV-A | patch-p1
会导致补丁被干净地应用。之后,
git diff
看起来与
git show REV-A
相同


发生什么事了?合并如何在分支历史记录中引入修订,但实际上没有应用它?是否有其他未应用的合并更改?

如果合并结果中缺少一些更改块,第一个也是根据我的经验,您需要问的唯一问题是,是否将它们显示为合并基础和分支尖端之间的更改。问它:

git diff $merge^1...$merge^2 -- FILE-A  # `$merge^2` was `feature` as of the merge
                                         # `$merge^1` was `dev`
上面的三点语法是针对diff的,每个人至少有时都想看看hunks merge对分支的更改

如果更改没有出现在输出中,那么这些
REV_A
更改在
REV_A
和合并之间的某个提交中被还原,无论是通过以前的合并(到任一分支),在这种情况下,您可以再次询问关于该合并的相同问题,或者直接通过某种等价的
git revert


如果更改确实出现在输出中,那么由于修补程序干净地应用了大块,因此在该合并中手动恢复了更改。

您仍然有运行的命令吗?这将有助于追踪可能出现问题的地方。我忍不住想,不知何故,该功能没有正确地“完成”。你能确认你键入了“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工作流的信息(特别是命令和它们的作用),这里有一个很好的备忘单。

功能分支在任何时候都重新设置了基础吗?请发布git log--graph--装饰--单线--完整历史--祖先路径^ REV_a HEAD(复杂的合并已签出)。查看您运行的命令会非常有帮助。如果您有一个shell加载项,显示您在其中运行命令的分支,那就更好了。我猜您可能已经将
dev
合并到了功能分支中,而不是将功能分支合并到
dev
。但是,这只是一种猜测,而没有看到您所执行的操作我们实际上在做什么。