【问题标题】:git commited code lines disappeargit提交的代码行消失
【发布时间】:2017-09-01 01:35:46
【问题描述】:

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

有时这很明显,例如当文件的一部分发生更改时,有时它可能更微妙。这看起来不是故意的,受影响的人似乎也没有使用 rebase、commit amend、revert 等可以提供简单解释的东西。自然而然,消失的代码总是在较新的提交中未修改的旧代码。

在无冲突合并期间,是否有任何其他方式可以让 git 覆盖以前提交的部分内容?

【问题讨论】:

  • 您是否浏览过 git 日志以了解这些行是如何以及何时消失的?您可以在注意到文本消失的地方发布两个父提交和合并提交吗?
  • 在其中一个缺失的行中找到一个相对独特的示例,并使用git log -Gphrase 列出添加或删除包含该短语的行的所有提交的列表。应该为您缩小搜索范围
  • 其实,为了澄清问题,是代码在合并提交中消失了,但保留在原始提交中,还是您看到代码从原始提交中消失?
  • @LightBender 原始提交没问题,只是合并提交受到影响。

标签: git git-merge


【解决方案1】:

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

当需要将你的分支合并到 master 时(当然你的 PR 已经被你的同行审查过 :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,并希望他们的队友这样做,有反对意见。

【讨论】:

  • 为什么我会因为这个答案而被否决,这可能是一件完全有效的事情。
猜你喜欢
  • 1970-01-01
  • 2021-02-27
  • 2015-01-15
  • 1970-01-01
  • 2011-09-07
  • 2019-05-26
  • 2021-01-21
  • 2019-07-12
  • 2015-12-12
相关资源
最近更新 更多