GIT:在new / dirty / dev分支中提交对旧/安全分支的更改,而不检出或丢失未分段的数据

时间:2010-09-19 13:01:35

标签: git branch commit git-checkout

在我开始开发实验之前,我创建了一个新分支。我经常忘记(这不是问题),但现在我事先做了 从那以后,我更新了3个文件。

  • 2只是实验性更改,我不想将其提交给安全分支。
  • 在1中只是安全(次要)更改,我肯定希望提交到安全分支。我很好地将这些最后的更改提交给新分支(但不是)。

是否有可能 - 我确定是 - (快速)从我的(脏)工作目录中提交一些未经分级的,未提交的更改到旧的安全分支?

我唯一能想到的是切换分支(没有签出),将更改提交到1个文件并切换回来,但我不知道切换回脏分支时会发生什么变化(是他们还在那里还是因为承诺而“消失”了?)......

我确信GIT有一些美丽的东西,但GIT有这么多,我找不到完全相同的东西。
(我一直在使用this 'manual' for help,但我不确定那里有同样的东西。如果是(并且你愿意扫描那件事),请告诉我,所以我知道下次看起来更难。)

谢谢!现在我只需要保留一张纸,方便更改'以便稍后提交安全分支'。

3 个答案:

答案 0 :(得分:7)

答案 1 :(得分:6)

所以你的情况是

x--x--x (safe)
       \
        <a,b,c> (3 private evolutions in exp branch)

你想去

x--x--x--a (a committed only in safe banch)
       \
        b,c (b and c commited in exp branch)

你可以:

git add a
git commit -m        # in exp branch, gasp!
git stash save       # save the rest of the exp work in progress
git checkout master
git merge exp        # fast-forward merge

x--x--x--a (safe,exp)
          \
           [b,c] (stashed)

git branch -f exp HEAD~1  # reset branch exp to before 'a'
git checkout exp
git stash pop
git add -A
git commit -m "..."

x--x--x--a (a committed only in safe banch)
      \
        b,c (b and c commited in exp branch)

答案 2 :(得分:0)

由于GIT上的分支操作非常便宜,我只想使用以下工作流程:

  • 从“实验性”分支机构创建新分支
  • 提交所需的任何非暂存文件
  • 回到主人
  • cherrypick无论你的“实验性”和“实验”提交的是什么刚刚在步骤1中创建的新分支。
  • 回到“实验”分支