2017-09-01 46 views
1

在工作中,我们已经开始注意到一些奇怪的git行为,我无法解释。有人会进行提交,然后(通常在合并之后),提交中的一些代码行将被撤消。这不是整个提交,并且可能只影响文件的一部分。它也似乎发生在正常的成功合并之后(即没有解决得很差的冲突)。git提交的代码行消失

有时候这是显而易见的,就像文件的一部分发生变化一样,其他时候可能会更加微妙。它看起来并不是故意的,并且受影响的人看起来并不像使用rebase,commit修改,还原等等,这可以提供一个简单的解释。自然,消失的代码始终是较旧的代码,在较新的提交中未修改。

有没有其他方式可以在无冲突合并期间通过git覆盖之前提交的部分?

+1

你浏览过git日志来弄清楚行和行何时消失吗?你可以发布两个父提交和合并提交你注意到消失文本? –

+1

在这些缺失的行之一中找到一些相对独特的示例,并使用'git log -Gphrase'列出所有提交的列表,这些提交要么添加了要删除的行,要么删除该行。应该缩小搜索范围 – LightBender

+0

[可以在使用git合并递归策略时改变无冲突覆盖?](https://stackoverflow.com/questions/45453017/can-changes-be-conflictless-overwrite-when -using-git-merge-with-recursive-stra) – max630

回答

-1

有时团队成员会在他们准备合并时提交他们的提交squash。在开发过程中,做出许多提交并拥有相当活跃的git历史记录可能会有帮助。

当你需要将你的分支合并到主人当然你已经让你的同伴审查了你的同事:wink :)你可以选择将你的提交压缩成一个,这将使历史更易于管理一个庞大的团队。

你可以做到这一点通过检查你的git的日志:

git log 

然后选择你要合并的提交到一个:

git rebase -i HEAD~4 

%的文档您EDITOR将被装入每次提交,它的消息,请按照编辑器提示:

pick 01d1124 Adding license 
pick 6340aaa Moving license into its own file 
pick ebfd367 Jekyll has become self-aware. 
pick 30e0ccb Changed the tagline in the binary, too. 

# Rebase 60709da..30e0ccb onto 60709da 
# 
# Commands: 
# p, pick = use commit 
# e, edit = use commit, but stop for amending 
# s, squash = use commit, but meld into previous commit 
# 
# If you remove a line here THAT COMMIT WILL BE LOST. 
# However, if you remove everything, the rebase will be aborted. 
# 

一些球队遵循this particular workflow,宁愿他们的队友这样做,也有反对此的论点。

+0

为什么我会拒绝为这个答案投票,这是可能发生的完全有效的事情。 –