【问题标题】:Git: alternative for stashGit:存储的替代品
【发布时间】:2017-04-07 14:59:47
【问题描述】:

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

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

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

【问题讨论】:

    标签: git git-extensions git-worktree


    【解决方案1】:

    git worktree

    Git 工作树于 2007 年在 git repo 的 contrib 文件夹下引入,名为 new-workdir


    例如:

    git worktree add <second path>
    

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

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

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

    这是一个关于如何创建新工作树及其结果的示例:


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

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

    如果没有,stash 的替代品是什么?

    如上所述 - 使用工作树

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

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

    【讨论】:

    【解决方案2】:

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

    git stash save "stash_a"
    

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

    git stash list
    

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

    git stash pop stash@{n}
    

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

    您提到了以下内容:

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

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

    git commit -m 'WIP'
    

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

    git commit --amend
    

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

    【讨论】:

    • type git stash list 然后你可以查看提交是在哪个分支上进行的,你可以获取任何你想要的存储
    • 这里还有一点值得注意:git stashno 分支上提交。这就是为什么使用git stash 将未提交的更改从一个分支移动 到另一个分支如此容易的原因:保存一个新的存储,然后签出分支,然后应用并删除保存的存储。但是,我发现,如果周围有很多保存的存储,我就会忘记哪个是哪个。
    • “实际上,提交并没有错,” - 完全正确!除了修改之外,您还可以轻松地提交,然后再返回并重置到之前的最后一次提交(同时保持工作目录不变),然后继续从您离开的地方工作。只要您没有推送提交,这当然可以在提交方面干净利落。
    猜你喜欢
    • 2018-11-15
    • 2015-06-19
    • 1970-01-01
    • 2022-09-28
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多