我如何将我的git历史线性化?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

问题

考虑到我有如下所示的提交:

A - B - C - D - G - H
     \         /
      - E - F -

我怎样才能得到一个完全线性的历史?

我想得到:

A - B - C - D - G'- H'

如上文所述,预计G和H的SHA 1将发生变化。(理由明显)。如果SHA 1的A,B,C和D也有变化,那么我想知道为什么。

提问于
用户回答回答于

以下命令:

git filter-branch --parent-filter 'cut -f 2,3 -d " "'

为什么?

通过将每个合并提交转换为一个简单的提交,就可以解决问题:这将简单地删除合并的特性分支,因为它们将成为孤儿。

每个提交都有一个或多个父提交。合并提交是获得一个以上的提交。Git将此存储在历史记录的每个提交对象中。

git filter-branch命令,使用--parent-filter选项。

用户回答回答于

手动执行以下操作:

git rebase -i D-sha1

编辑文件,使G设置为“编辑”。为H.Save和Close编辑保留“选择”。

现在Git允许编辑G提交,让我们将其修改为F提交的压缩合并。你想:

#cancel the merge commit and position HEAD to D
git reset --hard HEAD~
#squash merge and continue
git merge --squash F-sha1
git rebase --continue

请注意,如果必须在第一次合并中解决相同的冲突.

就像你说的那样,你只会有新的SHA 1为G和H。

扫码关注云+社区