的Git藏匿流行 - 解决冲突与合并工具
问题描述:
我遇到这种突然的,因为它在史诗浮躁的形式,呈现我的应用程序没用,但混帐藏匿弹出(或应用)自动处理合并冲突。当它这样做,它增加了两个版本的文件,像这样:
<<<<<<< Updated [remote]
Change from Remote
=======
Change from Stash
>>>>>>> Stashed changes
不知道该先损失了一些时间,因为这些添加的行无效的XML文件。
所以,我想知道是否有一种方法来强制git存储不自动合并,但离开冲突的地方,使他们可以与git mergetool解决,而不是要求我打开每个文件编辑器并处理“merte”进程而没有为合并冲突设计的工具的好处。
感谢 Jaeden“SIFO DYAS” al'Raec Ruiner
答
通过git stash apply
- 这所使用的合并进程是git stash pop
上半年-is同任何其他的合并,在留下的影响方面:
$ 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
下半年):
$ 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
[email protected]{0}: WIP on master: 6fee57d add file "file"
在指数目前什么是未合并状态,以文件file
目前各3份:
$ 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存储不自动合并,但离开冲突到位...
此时文件的所有三个版本都存在于索引中。其中只有两个,--ours
(通常与HEAD
提交版本相同)和--theirs
(本例中为存储提交版本)具有方便的git checkout
命令语法,但您也可以使用:<number>:path
语法提取合并基本版本。运行git mergetool
可以为您提供基础,左侧/本地/ ours
和右侧/远程/ theirs
版本 - 就在运行配置的合并工具之前。
因此,我不确定你的问题是什么。
同意。这是非常标准的版本控制系统行为。 – Mort
好吧,当我运行git merge,比如说revision_5分支并开发分支,并且假设存在冲突。它会尝试自动合并。如果它可以很好,但如果不是,它不会在文件中添加他们和我们的恼人标签,它只会将它们都留下,并且命令行中的活动分支变成(开发|合并)。你是说,即使这不会发生与Git存储应用,它只是将两个版本合并到单个文件,git mergetool仍然会运行,并允许我修复合并? – JaedenRuiner
在* all *合并冲突的情况下,Git应该像这样标记工作树文件。原始文件全部存储在索引中,因此,您可以使用* 5 *个活动版本(HEAD;索引阶段1,2,3和4)来替代通常的三个活动版本的文件(HEAD,索引阶段0,工作树) 3;工作树)。通过采用工作树版本,在其中一条路径上运行'git add'或'git rm',可以将三个高阶索引阶段副本还原到单阶段0索引副本。如果git mergetool脚本认为它运行的工具成功,那么'git mergetool'脚本会为你运行'git add'。 – torek