Git Stash Pop - 使用mergetool解决冲突

时间:2017-09-20 19:40:38

标签: git git-bash mergetool

所以,

我突然遇到这个,因为它以史诗般的浮躁形式,使我的应用程序无用,但git stash pop(或apply)会自动处理合并冲突。当它这样做时,它会将两个版本添加到文件中,如下所示:

<<<<<<< Updated [remote]
     Change from Remote
=======
     Change from Stash
>>>>>>> Stashed changes

一开始不知道这个花了我一些时间,因为那些添加的行使xml文件无效。

所以,我想知道是否有办法强制git stash不自动合并但是留下冲突,以便可以使用git mergetool解决它们,而不是要求我在编辑器中打开每个文件并处理&#34; merte&#34;没有为合并冲突设计的工具的好处。

由于 Jaeden&#34; Sifo Dyas&#34; al&#39; Raec Ruiner

1 个答案:

答案 0 :(得分:1)

git stash apply使用的合并过程 - 这是git stash pop的前半部分 - 在留下效果方面与任何其他合并相同:

$ git status
On branch master
nothing to commit, working tree clean
$ git log --all --decorate --oneline --graph
* f9a96c0 (HEAD -> master) conflicting changes for stash
| *   069a595 (refs/stash) WIP on master: 6fee57d add file "file"
| |\  
|/ /  
| * c466c42 index on master: 6fee57d add file "file"
|/  
* 6fee57d add file "file"
* 2353af8 initial

此时,无论我是运行git stash apply还是git stash pop,我都会遇到合并冲突,然后流程停止(不会执行git stash pop的后半部分):< / p>

$ git stash apply
Auto-merging file
CONFLICT (content): Merge conflict in file
$ git reset --hard HEAD
HEAD is now at f9a96c0 conflicting changes for stash
$ git stash pop
Auto-merging file
CONFLICT (content): Merge conflict in file
$ git stash list
stash@{0}: WIP on master: 6fee57d add file "file"

索引中的内容现在是未合并状态,文件file的所有三个副本都存在:

$ git ls-files --stage
100644 239c0dc4252320079890fff28cd408eb825776f5 0   README
100644 2983120c0897fea017d8398b5ffdc5e3ef0e17ad 1   file
100644 27b6da381575999c9ba975e9df9ba6caa45e3165 2   file
100644 080f90d42698e258e3efa8059c78ebfd5fdd7bd8 3   file

git mergetool很高兴能够在这一点上运行:

$ git mergetool 
[snip configuration complaint - I never use git mergetool
 so it is not configured]
Merging:
file

Normal merge conflict for 'file':
  {local}: modified file
  {remote}: modified file
Hit return to start merge resolution tool (bc): 
  

所以,我想知道是否有办法强制执行git stash不自动合并但是留下冲突......

此时,该文件的所有三个版本都存在于索引中。其中只有两个--ours(通常与HEAD提交版本相同)和--theirs(在这种情况下为stashed-commit版本)具有方便的git checkout命令语法,但您也可以使用:<number>:path语法提取合并基本版本。运行git mergetool会为您执行此操作 - 在运行已配置的合并工具之前提取基本,左侧/本地/ ours和右侧/远程/ theirs版本。 / p>

因此,我不确定你的问题是什么。