Git:有没有办法存储两个分支的差异结果?

时间:2018-10-10 16:24:42

标签: git

我的用例是这个。我有产品分支(prod)和工作分支(wip)。由于某些原因,我不想在这里详细说明,wip分支包含过多的commits(它是从较早的位置分支出来的,然后合并并分开,等等)。我要实现的只是将我的wip分支与prod分支再进行比较,然后不管我刚刚存储的更改如何。然后,我可以创建一个新分支并git stash pop,这将为我提供更加清晰的分支日志历史记录。有没有简单的方法可以做到这一点?

2 个答案:

答案 0 :(得分:2)

  

我要实现的只是将wip分支与prod分支进行比较,然后不管我将其隐藏的任何更改。然后,我可以创建一个新分支,并git stash弹出它,这将为我提供更加清晰的分支日志历史记录。有没有简单的方法可以做到这一点?

据我了解,您想要的是将wip分支置于prod的顶部,并且拥有更清晰的历史记录。您不需要此存储。相反,请使用git diff制作补丁,并使用git apply将其应用于新分支。

# Make a new wip branch from prod
git checkout -b new-wip prod

# Get the diff between prod and wip
git diff prod wip > wip.patch

# Apply the patch
git apply wip.patch

然后删除旧分支并重命名新分支。

git branch -D wip
git branch -m new-wip wip

但是通常,当您想清除历史记录时,可以使用rebase。首先,使用rebase重写wip分支,使其所有更改都在prod之上。

git checkout wip
git rebase prod

这将清除wip中的所有合并或其他历史记录工件。现在,好像您一直在wip的最新版本上写下prod中的所有更改一样。

然后使用"interactive rebase" to modify the wip branch as you like。这可以包括使用fixsquash将多个更改合并为一个。

# Interactively rewrite the changes since prod
git rebase -i prod

这是完成目标的更通用,更优雅的方法。它使您可以更好地控制提交和历史记录。您不仅需要将所有内容混在一起,而且可以选择。

答案 1 :(得分:0)

让我看看我是否明白这一点。您想从prod开始一个新的分支,该分支在wip和prod之间进行了所有更改,并且您将在prod忘记了wip的详细历史之后作为一个修订提交吗?

如果是这种情况,我可以使用reset命令:

git checkout -b new-wip wip # place new wip where old wip is
git reset --soft prod # set branch pointer where prod is

这时您应该能够提交,并且您将获得分支new-wip,它在prod之后具有单个提交,并且具有与old-wip完全相同的树。