【问题标题】:Commit to another branch without touching unstaged files提交到另一个分支而不接触未暂存的文件
【发布时间】:2013-01-31 08:38:28
【问题描述】:

我有两个分支,比如 B1 和 B2。我在 B2 中,我有暂存和未暂存的文件。

我希望在 B1 中提交暂存文件(当我 git add-ed 文件时我以为我在 B1 中),而在 B2 中提交未暂存文件。

有可能吗?怎么样?

【问题讨论】:

    标签: git


    【解决方案1】:

    git stash 在分支之间移动脏更改时非常强大。在您的情况下,您可以应用以下步骤:

    1. git stash --keep-index,这只会存储未暂存的文件
    2. git stash,这将隐藏其余部分,即暂存文件
    3. 切换到 B1
    4. git stash pop,暂存文件将移至 B1
    5. 切换到 B2
    6. git stash pop,未暂存的文件将移至 B2

    之后,您可以单独提交每个分支中的更改。

    【讨论】:

    • 是的,这很好,而且我不知道可以存储多个状态。
    • 您可以将 Git 中的存储结构视为堆栈。
    【解决方案2】:

    我确信有一种更优雅的方式,但我能想到的只是:

    1. 将暂存文件提交到 B2
    2. 将未分阶段的工作存放在 B2 上
    3. 切换到 B1,然后在 B1 中挑选 B2 的最新提交
    4. 切换回 B2,重置最新提交(--hard 方式)
    5. 在 B2 上暂存并提交隐藏的工作

    编辑

    这个question 有一个详细的答案,或多或少符合我的建议。

    【讨论】:

      【解决方案3】:

      如果修改后的暂存文件和未暂存文件没有通过切换到 B1 分支而改变,您可以在不影响任何内容的情况下切换分支,然后您可以轻松提交文件并切换回 B2。

      但是,如果您修改的文件在 B1 和 B2 之间发生更改,则无法切换分支。在这种情况下,您必须在切换分支之前存储您的更改。

      1. git stash --keep-index 存储和保留暂存文件
      2. git reset HEAD 取消暂存文件
      3. git stash 存放您之前暂存的文件
      4. git checkout B1 切换到 B1 分支
      5. git stash pop 取消存储并删除您最后的存储
      6. git commit -a 提交您之前在 B1 上暂存的文件
      7. git checkout B2 切换到 B2 分支
      8. git stash pop
      9. git commit -a 提交 B2 上的所有剩余更改​​em>

      小心使用这些命令!我不是 git pro! :-)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-25
        • 1970-01-01
        • 2017-07-16
        • 2021-04-10
        • 2019-05-06
        • 2011-02-27
        • 1970-01-01
        • 2011-05-06
        相关资源
        最近更新 更多