Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.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 - Fatal编程技术网

Git 自动合并问题

Git 自动合并问题,git,Git,不知何故,我把我们的主分支和我曾经把主分支搞砸的功能分支都搞砸了。现在我正试图修复它,但遇到了麻烦。值得一提的是,我已经在master和feature分支中确定了需要“回滚”到的提交,因此我相信原来的问题已经消除了 问题:当我将功能分支合并到master中时,自动合并似乎是删除功能分支中的一些代码,而不是将其合并到master中。它并没有给我机会将其作为合并冲突来解决……它只是没有将这些代码移到master中 黑客:我发现如果我进入功能分支中的一个受影响的脚本(account/views.py)

不知何故,我把我们的主分支和我曾经把主分支搞砸的功能分支都搞砸了。现在我正试图修复它,但遇到了麻烦。值得一提的是,我已经在master和feature分支中确定了需要“回滚”到的提交,因此我相信原来的问题已经消除了

问题:当我将功能分支合并到master中时,自动合并似乎是删除功能分支中的一些代码,而不是将其合并到master中。它并没有给我机会将其作为合并冲突来解决……它只是没有将这些代码移到master中

黑客:我发现如果我进入功能分支中的一个受影响的脚本(account/views.py)并删除一个空格或其他内容,它会迫使我将其作为冲突解决,然后我可以告诉Git保留我需要保留的代码。我想,对于所有受影响的脚本,我当然可以这样做,但如果有一种更优雅的方式使用Git处理它,我宁愿不做“黑客”

我已经做了一个
git diff feature branch
命令,并将结果复制到一个文本文档中,这样我就可以通过它来确定什么都需要上面的“hack处理”,但它太大了

我不确定是否有任何截图类型的信息会有所帮助,所以没有包括在内。请让我知道任何有用的信息需要,我会提供一个编辑到这个

任何帮助都将不胜感激

更新#1 显示合并过程中的终端命令: **坐在“主”分支上…这是在apps/account/views.py上执行“hack”后显示的内容

kedmiston:ahnew kedmiston$ git merge ftr_refer
Auto-merging apps/ajax/views.py
CONFLICT (content): Merge conflict in apps/ajax/views.py
Auto-merging apps/account/views.py
CONFLICT (content): Merge conflict in apps/account/views.py
CONFLICT (modify/delete): apps/account/templates/account/refer-success.html deleted in HEAD and modified in ftr_refer. Version ftr_refer of apps/account/templates/account/refer-success.html left in tree.
CONFLICT (modify/delete): apps/account/templates/account/refer-a-friend.html deleted in HEAD and modified in ftr_refer. Version ftr_refer of apps/account/templates/account/refer-a-friend.html left in tree.
Auto-merging ahnew/urls.py
CONFLICT (content): Merge conflict in ahnew/urls.py
Automatic merge failed; fix conflicts and then commit the result.
kedmiston:ahnew kedmiston$ git mergetool
更新#2 最新的想法/怀疑是,在从功能分支(ftr_refere)到主功能的合并中丢失的是ftr_refere历史中的提交,这些提交是在我尝试合并到的主功能提交日期之前进行的。这就是说,我想知道我是否要将master回滚到9月底的某个日期,合并ftr_引用到它,这会允许ftr_引用的更改正确地返回到master吗?然后,如果是这样的话,我怎样才能将提交/合并重新应用到master,从而使其返回当前状态

附加了来自ftr_的git log命令的一些屏幕截图参考(1): 和硕士(4):
这与其说是一个答案,不如说是一些解释,但它比评论所允许的要长

任何时候你做一个合并,你是在看连接两个部分的历史。合并时,始终有3个神奇值:基本值、远程值和本地值。如果要执行
git checkout master
,然后执行
git merge ftr\u refere
,那么这三个神奇的值将设置如下

BASE=$(git merge-base master ftr_refer)
LOCAL=master
REMOTE=ftr_refer
要合并的变更集表示为

git log ^${BASE} master # changes on master only 
git log ^${BASE} ftr_refer # changes on ftr_refer only 
Git通过via为该功能提供快捷方式

git log ftr_refer..master # changes on master only 
git log master..ftr_refer # changes on feature refer only
假设基础版本中有一个1000行长的views.py版本。在master中,有人去删除前500行。在ftr_中,参考其他人去修改900-1000行。当您将它们合并在一起时,Git将合并这两个更改。因此,您将得到一个merge views.py,它缺少前500行,并且修改了400-500行。Git不会告诉您这是一个合并冲突,也不会要求任何帮助来解决这个问题。现在,如果您修改了前500行中的一行,那么肯定会出现冲突(如您所发现的)

听起来好像master上有人删除了一些更改,而您不希望这些更改出现在最终结果中。通常,我不建议在合并过程中处理这个问题。相反,您可能希望恢复这些更改。但是,如果只是需要将这些更改与来自ftr_refer的更改结合起来,那么您有几种方法来处理它

首先,找出哪些提交正在接触该文件。你可以

git log ftr_refer..master -- account/views.py
或者您可以查看所有提交并列出文件更改

git log --name-only ftr_refer..master
这将显示哪些提交删除了这些行。也许可以咨询一下那个提交人。也许这些行真的应该删除。也许它们是坏的,应该恢复。如果我们假定这些行不需要与ftr_refere更改一起存在,那么您会遇到一些问题。您可以通过以下方式修复它

合并主机以一次提交一个功能。所以不是

git checkout ftr_refer
git merge master 
你会的

git checkout ftr_refer
git rev-list --reverse ftr_refer..master # this will list out a bunch of shas
git merge SHA 
git merge -s=ours SHA
按顺序处理SHA。对于任何您希望保留更改的SHA,您都会这样做

git checkout ftr_refer
git rev-list --reverse ftr_refer..master # this will list out a bunch of shas
git merge SHA 
git merge -s=ours SHA
对于任何您不希望进行更改的SHA

git checkout ftr_refer
git rev-list --reverse ftr_refer..master # this will list out a bunch of shas
git merge SHA 
git merge -s=ours SHA
这将在不合并更改的情况下为SHA创建合并历史记录

仅当您对每个SHA的更改采用全有或全无的方法时,此方法才有效。如果只有一个SHA,并且您希望在foo中进行更改,但不希望在bar中进行更改,那么这将不起作用。你必须更手动地完成这些工作


至于您的具体想法“我要将master回滚到9月底的某个日期”-一般来说,在这里使用date是没有用的

那么…Git报告它做了什么样的合并?如果它是快进的,那么Git在合并时并没有检测到任何错误。此外,您是否验证了在运行某些测试/冒烟测试特定区域时确实存在源代码问题,您知道这些特定区域受到功能分支工作的影响?更好的是,您是如何进行合并的?我不明白为什么你觉得你需要一个“黑客”来解决问题。在问题中展示一些终端输出。那会很有帮助的。基思-你似乎不希望代码被删除。如果代码在master上被删除,并且没有合并到feature,那么我希望代码在合并中被删除。有道理?如果您想合并,但不希望所有更改,那么您有一个复杂得多的过程。已更改的代码或添加到ftr_refere分支上的代码应该向下合并。存在于合并基础上且为t的代码