5

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

  • 从 master 分支,我创建了 3 个分支AB并且C.
  • 开始在分支工作A,做了一些改变
  • 切换到分支B,我仍然看到更改,A因为它们没有提交
    • 我不想提交更改,A因为我还没有完成,我不希望这个提交出现在提交历史中
    • 我不想存储更改,A因为如果我进行更改B并切换到C,我也必须存储更改B==> 更改A已消失:被新存储覆盖。

我可以在不同的分支中做很多藏匿处吗?
如果没有,有什么替代方案stash
是我唯一commitrevert commit选择吗?

4

2 回答 2

8

git worktree

Git worktree 于 2007 年contrib在 git repo 的文件夹下引入,并被称为new-workdir.


例如:

git worktree add <second path>

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

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

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

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

在此处输入图像描述


我可以在不同的分支中做很多藏匿处吗?

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

如果不是,那么 stash 的替代品是什么?

如上所述 - 使用工作树

提交和恢复提交是我唯一的选择吗?

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

于 2017-04-07T15:04:45.140 回答
2

可以跟踪您的存储并以您希望的任何顺序应用它们。在分支A类型上:

git stash save "stash_a"

您可以类似地从分支BC. 您可以通过键入列出所有存储

git stash list

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

git stash pop stash@{n}

n存储的索引在哪里。使用您提供的名称将存储与堆栈中它们各自的索引相关联。

您提到了以下内容:

我不想在 A 中提交更改,因为我还没有完成,我不希望这个提交出现在提交历史中。

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

git commit -m 'WIP'

然后,当您返回分支A并完成任务时,通过以下方式提交:

git commit --amend

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

于 2017-04-07T15:08:29.593 回答