繁体   English   中英

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

[英]What is the right way to commit/push when there are conflicts in Git or TortoiseGit?

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

这是我们经常遇到的问题。 许多团队成员都在使用TortoiseGit。 合并冲突发生相当频繁,因为并发的变化-或者因为他们不pull的每一天。 一个用户将进行拉取,发生合并冲突,解决合并冲突,然后查看要提交回的文件列表。

但是,尽管只有少数几个文件涉及合并冲突,但文件列表中显示了很多文件。 提交时,他取消选中了他不参与的所有其他文件更改,提交了结果并推送了提交。

结果:在此用户的上一次提交和此提交之间,其他人所做的所有提交都丢失了!

首先,为什么Git或TortoiseGit只是显示用户列表中与用户无关的文件列表? 其次,在这种情况下正确的做法是什么-从TortoiseGit角度来看的任何答案都将有所帮助。

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

至于工作流程中更深层次的问题,听起来人们正在直接致力于掌握。 这是您的主要问题。 没有人应该直接将其提交到您的中继。 相反,人们应该开始在新的分支机构工作。 即使更改仅针对一个文件,高效的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

我将逐行回答您的问题:

首先,为什么Git或TortoiseGit只是显示用户列表中与用户无关的文件列表?

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

其次,在这种情况下正确的做法是什么-从TortoiseGit角度来看的任何答案都将有所帮助。

通过在解决合并冲突时取消选中文件,实际上是在告诉TortoiseGit您实际上不想合并/保留这些文件更改。 您基本上是在说“我不希望这些更改,而只是将它们扔掉”。 如果那不是您真正想要做的,那么就不要取消选中TortoiseGit自动准备提交给您的那些文件,即使您最初不负责这些文件中的更改也是如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM