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

bre*_*mri 4 git

我有我的主分支和一个功能分支,但功能分支包含太多提交(它是从较早的点分支出来的,然后合并和发散等)。

我想要将我的功能分支与主分支进行比较,然后无论发生什么变化,我只是将其隐藏起来。然后我可以创建一个新分支git stash pop,这将为我提供更清晰的分支日志历史记录。

是否有捷径可寻?

Sch*_*ern 5

我想要实现的是将我的 wip 分支与 prod 分支进行比较,然后无论发生什么变化,我都将其隐藏起来。然后我可以创建一个新分支并 git stash pop 它,这将为我提供更清晰的分支日志历史记录。是否有捷径可寻?

如果我理解的话,你想要的是你的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
Run Code Online (Sandbox Code Playgroud)

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

git branch -D wip
git branch -m new-wip wip
Run Code Online (Sandbox Code Playgroud)

一般来说,当你想清理历史记录时,你会使用rebase. 首先,使用rebase重写wip分支,使其所有更改都位于prod.

git checkout wip
git rebase prod
Run Code Online (Sandbox Code Playgroud)

这将消除 中的任何合并或其他历史工件wip。现在就好像您将所有更改都写在wip最新版本之上prod

然后使用“交互式变基”来根据wip需要修改分支。这可以包括使用fixsquash将多个更改合并为一个。

# Interactively rewrite the changes since prod
git rebase -i prod
Run Code Online (Sandbox Code Playgroud)

这是实现目标的更通用和优雅的方式。它允许您更好地控制您的提交和历史记录。你不必把所有东西混在一起,而是可以有选择。

  • 感谢您写得很好且信息丰富的答案。并且您的解决方案有效。但是,我发现 @eftshift0 的答案更容易解决我所说的问题。我赞成你的答案,但接受了 eftshift0 的答案。 (2认同)