【问题标题】:GIT: Do I need to commit my branch before checking out another branch, what about stashing?GIT:我是否需要在签出另一个分支之前提交我的分支,存储呢?
【发布时间】:2011-01-03 02:55:14
【问题描述】:

我是 Git 新手,有点困惑。我有一个 Master 分支并创建了第二个功能分支。

如果我在我的功能分支中进行更改然后切换到 Master,如果我不提交,我的更改会丢失吗?

stash 在哪里发挥作用,是您在切换分支之前执行的操作(但不想提交)还是只是简单地还原一些更改以便您可以暂时返回到以前的代码?

【问题讨论】:

    标签: git git-commit git-stash


    【解决方案1】:

    除非你清理你的树,否则你不能改变到另一个分支。这是通过提交您的更改、还原它们或将它们保存到存储来完成的。

    【讨论】:

    • git checkout 将在切换分支时“继承”暂存和未暂存的更改,只要更改仅限于在当前分支和新分支中相同的文件(即没有机会如果将更改应用于任一分支,则发生冲突)。此外,可以使用git checkout --merge 强制进行合并尝试,但这可能会导致合并冲突,并且这些冲突可能难以解决(这可能会导致难以返回到结帐前状态)。
    • 哇不知道是谁,但感谢 -2 反对票...我不久前也想出了这个,但在撰写本文时,我记得不可能这样做。 Git 1.7 是新的吗?
    【解决方案2】:

    您可能不想为此目的使用 stash。

    如果你真的想同时在 master 和 feature 分支上开发,我建议克隆你的存储库,在克隆和 master 上工作,然后使用推送和拉取在它们之间移动更改。

    如果您经常在它们之间切换,我建议您在切换之前检查;收垃圾没有错; git 使以后很容易解决这个问题。

    【讨论】:

    • 这是我的情况。我有几个网站的解决方案。我想同时处理项目的不同版本,我不想为每个版本使用不同的工作目录。因此,我正在寻找一种在项目的各个版本之间切换的方法,但让 git 管理为我更改周围的所有文件,这样我就可以使用指向每个网站的一个 IIS 设置,而不必更改指向的所有设置具体路径等
    • 请注意,stash 按照您的建议通过签入来工作。就像其他任何提交一样,它是存储库中的有效提交。它碰巧 not 被分支 ref 引用,但它被 stash ref 固定。请参阅此处的 DISCUSSION 部分:kernel.org/pub/software/scm/git/docs/git-stash.html
    • 啊,但是如果你的注意力转移到其他事情上,你很容易忘记你已经藏起来的事实。在我看来,向你的分支负责人承诺会更安全。
    • 我认为这是一个非常糟糕的建议。当您可以制作另一个克隆时,分支有什么用?!
    • 我不明白你的评论;你能扩展吗?在我的回答中,我建议使用克隆,但如果用户热衷于使用单个存储库,我建议不要使用 stash。
    猜你喜欢
    • 2015-08-02
    • 2015-12-11
    • 2022-11-28
    • 2020-05-07
    • 2018-12-28
    • 2021-11-06
    • 2015-10-16
    • 2021-08-21
    相关资源
    最近更新 更多