当Git或TortoiseGit中存在冲突时,提交/推送的正确方法是什么?

时间:2013-11-19 17:06:12

标签: git git-merge tortoisegit merge-conflict-resolution

我们正在使用git和合并工作流程。我们有很多git新手(包括 me)具有SVN或CVS背景,或者没有版本控制背景 一点都不。

这是我们遇到的一个常见问题。许多团队成员都是 使用TortoiseGit。由于并发,合并冲突经常发生 变化 - 或者因为他们每天都没有pull。一个用户会做拉,有 合并冲突,解决合并冲突,然后查看文件列表 承诺。

但是文件列表显示了很多文件,尽管存在合并冲突 仅涉及少量文件。在提交时,他取消选中所有其他文件 他没有参与的变化,承诺结果并推动了 提交。

结果:此用户之间已完成的所有其他人提交 之前的提交,这个丢失了!

首先,为什么Git或TortoiseGit只显示用户拥有的文件列表 列表中无关?其次,这是正确的做法 场景 - 来自TortoiseGit视角的任何答案都会有所帮助。

2 个答案:

答案 0 :(得分:0)

您原来的问题是错误的。您的工作流程已损坏,因此您遇到了很多冲突。你应该解决这个问题。在您确实遇到合并冲突的情况下,树的状态是传入的更改会自动暂存,需要手动干预的更改将在工作环境中。对于每个未分阶段的文件,用户需要解决冲突并分阶段进行更改。一切准备就绪后,您可以提交整个更改集。这将是一个合并提交,因此它不应包含新的功能或逻辑。如果在此期间取消暂存文件,则基本上是使用本地副本中的版本覆盖传入的更改。

至于工作流程中的更深层次的问题,听起来人们直接致力于掌握。这是你的主要问题。没有人应该直接进入你的行李箱。相反,人们应该开始在一个新的分支工作。即使更改是针对一个文件,高效的git工作流也非常依赖于分支。完成分支中的工作后,您可以将分支合并到master中,或将master合并到分支中。你也可以重新建立你的分支,以避免多次合并提交,虽然我发现这是不必要的。

我的工作流程看起来像这样:

 # git checkout master
 # git pull
 # git branch newbranch
 .
 .
 Do work
 .
 # git merge master     <!-- Optional to pull in changes from master -->

 .
 .
 # git add <files>
 # git commit
 # git checkout master
 # git merge newbranch

答案 1 :(得分:0)

我将逐行解决你的问题:

  

首先,为什么Git或TortoiseGit只显示用户拥有的文件列表   列表中没什么可做的?

当您从另一个分支合并文件更改时,这些更改当然可能 包含来自其他人的工作。这就是为什么你看到文件更改不是 一定是你的。它们代表您尝试合并的所有更改 英寸

  

其次,在这种情况下,正确的做法是什么 - 来自a的任何答案   TortoiseGit视角会有所帮助。

通过在解决合并冲突时取消检查文件,基本上就是这样 告诉TortoiseGit您实际上并不想合并/保留这些文件 变化。你基本上是在说“我不想要这些改变,只是扔掉它们 如果这不是你真正想做的事情,那就不要取消检查 TortoiseGit已经自动暂存给你的文件,即使是 您最初不对这些文件中的更改负责。