0

在 Git 中,我有一个实验分支 ( EXP-12)。我在那里做了一些更改,但我还没有准备好提交。我需要对master进行调整。

我去找师傅。

两种情况是可能的:

  1. 如果我在 on 时将我的更改包含在索引中EXP-12,它们也会出现在主分支的索引中。
  2. 如果我在 on 时没有将我的更改包含到 index 中EXP-12,那么这些文件也将显示为未在 master 分支上提交的更改。

我的问题是我希望一切都在 master 上并且EXP-12是分开的。我想做一些“实验性”更改EXP-12> 转到 master > 在 master 上进行更改 > 为提交 ( git add -A) > 提交所有内容 > 切换回 EXP-12 并继续实验。现在,如果我这样做,我在 master 分支上的提交将包括在EXP-12.

这背后的逻辑是什么?还是我错过了什么?

4

1 回答 1

0

这个问题的一个经典解决方案是使用git stash- 当你在时,EXP-12你可以这样做:

git stash save --keep-index "Some work-in-progress on EXP-12"

...然后像往常一样将分支更改为master,做一些工作,改回来,并应用最近的存储:

git checkout master

[... do some stuff ...]

git checkout EXP-12

git stash pop

但是,我个人更喜欢创建一个正在进行的提交,然后:

  • 改变它git commit --amend
  • 将分支移回上一个提交,但将所有工作保留为未暂存的更改:git reset HEAD^
  • ...或用于git rebase -i <EARLIER-COMMIT>将多个正在进行的提交压缩在一起。

创建实际提交相对于使用 stash 的优势在于,您可以在任何提交上应用 stash,而不仅仅是您保存它的那个提交,而正常提交会向前移动该分支并与较早的提交相关联。

于 2012-06-30T09:26:47.577 回答