Git: stash 的替代品
Git: alternative for stash
我正在为我的项目使用 Git 扩展程序。我很喜欢。
有一个问题一直困扰着我,我很确定 Git 扩展中有一个技巧。
这是场景:
- 我从 master 分支创建了 3 个分支
A
、B
和 C
。
- 开始在分支
A
工作,做了一些改变
- 切换到分支
B
,我仍然看到 A
中所做的更改,因为它们尚未提交
- 我不想在
A
中提交更改,因为我还没有完成并且我不希望此提交出现在提交历史记录中
- 我不想在
A
中存储更改,因为如果我在 B
中进行更改并切换到 C
,我必须在 B
中存储更改==> A
中的更改消失了:被新的存储覆盖。
我可以在不同的分支中创建多个 stash 吗?
如果不是,stash
的替代方案是什么?
commit
和 revert
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"
您可以类似地命名来自分支 B
和 C
的存储。您可以通过键入
列出所有藏品
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 给出的工作树答案可能是使用提交的替代方法。
我正在为我的项目使用 Git 扩展程序。我很喜欢。 有一个问题一直困扰着我,我很确定 Git 扩展中有一个技巧。 这是场景:
- 我从 master 分支创建了 3 个分支
A
、B
和C
。 - 开始在分支
A
工作,做了一些改变 - 切换到分支
B
,我仍然看到A
中所做的更改,因为它们尚未提交- 我不想在
A
中提交更改,因为我还没有完成并且我不希望此提交出现在提交历史记录中 - 我不想在
A
中存储更改,因为如果我在B
中进行更改并切换到C
,我必须在B
中存储更改==>A
中的更改消失了:被新的存储覆盖。
- 我不想在
我可以在不同的分支中创建多个 stash 吗?
如果不是,stash
的替代方案是什么?
commit
和 revert
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"
您可以类似地命名来自分支 B
和 C
的存储。您可以通过键入
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 给出的工作树答案可能是使用提交的替代方法。