Git: stash 的替代品

Git: alternative for stash

我正在为我的项目使用 Git 扩展程序。我很喜欢。 有一个问题一直困扰着我,我很确定 Git 扩展中有一个技巧。 这是场景:

我可以在不同的分支中创建多个 stash 吗?
如果不是,stash 的替代方案是什么?
commitrevert commit 是我唯一的选择吗?

git worktree

Git worktree 于 2007 年在 git 存储库的 contrib 文件夹下引入,名为 new-workdir


例如:

git worktree add <second path>

将在您的计算机上创建另一个文件夹,允许您同时在不同的分支上工作。

git worktree 将创建 2 个相互独立的工作文件夹,同时指向同一个存储库。

这将允许您在新工作树上进行任何实验,而不会对存储库本身产生任何影响。在所附的图片中,您可以看到有 2 个单独的 工作文件夹,但它们都使用一个存储库并共享内容。

下面是关于如何创建新工作树及其结果的示例:


Can I make many stashes in different branches?

是的,你可以,但你想避免它。您可以将存储弹出到与您最初存储源的分支不同的分支。

If not, whats the alternative of stash?

如上所述 - 使用工作树

Is commit and revert commit, my only option here?

再次:如上所述 - 使用工作树

可以跟踪您的藏品并按您希望的任何顺序应用它们。在分支 A 上输入:

git stash save "stash_a"

您可以类似地命名来自分支 BC 的存储。您可以通过键入

列出所有藏品
git stash list

要应用某个存储,您可以使用

git stash pop stash@{n}

其中 n 是存储的索引。使用您提供的名称将存储与其在堆栈中的相应索引相关联。

您提到了以下内容:

I don't want to commit changes in A because I'm not done yet and I don't want this commit to appear in commit history.

实际上,进行提交并没有错,因为您始终可以 修改 稍后提交而不会产生任何后果,假设您没有推送,或者如果你已经推动了,分支没有共享。因此,在分支 A 上使用 git stash 的替代方法实际上就是这样做:

git commit -m 'WIP'

然后,当您 return 分支 A 并完成任务时,通过此提交:

git commit --amend

请注意,执行 git stash 实际上会在幕后创建 2(或有时 3)次提交。所以我描述的这两种方法都依赖于以某种方式进行提交。 @CodeWizard 给出的工作树答案可能是使用提交的替代方法。