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