Git 当从一个分支切换到另一个分支时,目标分支是否应该继承索引和更改的文件?
在Git中,我有一个实验分支(Git 当从一个分支切换到另一个分支时,目标分支是否应该继承索引和更改的文件?,git,Git,在Git中,我有一个实验分支(EXP-12)。我在那里做了一些更改,但我还没有准备好提交。我需要对master进行调整 我去找师父 可能有两种情况: 如果我在EXP-12上将更改包含到索引中,它们也将出现在主分支的索引中 如果在EXP-12上未将更改包含到索引中,则这些文件也将显示为未在主分支上提交的更改 我的问题是,我希望master和EXP-12上的所有内容都是分开的。我想在EXP-12上做一些“实验性”更改转到master>do changes on master>stage everyt
EXP-12
)。我在那里做了一些更改,但我还没有准备好提交。我需要对master进行调整
我去找师父
可能有两种情况:
EXP-12
上将更改包含到索引中,它们也将出现在主分支的索引中EXP-12
上未将更改包含到索引中,则这些文件也将显示为未在主分支上提交的更改EXP-12上的所有内容都是分开的。我想在EXP-12上做一些“实验性”更改转到master>do changes on master>stage everything for commit(git add-A
)>commit>切换回EXP-12并继续实验。现在,如果我这样做,我在主分支的提交将包括在EXP-12
上所做的所有更改
这背后的逻辑是什么?还是我遗漏了什么?这个问题的经典解决方案是使用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修改它
- 将分支移回上一次提交,但将所有工作保留为未过时的更改:
git reset HEAD^
- 。。。或者使用
git-rebase-i
将几个正在进行的提交挤在一起
与使用隐藏相比,创建实际提交的优势在于,您可以在任何提交上应用隐藏,而不仅仅是在保存它的提交上,而正常的提交会向前移动该分支,并与以前的提交绑定。非常感谢!!我仍然不明白为什么git会实现我上面描述的逻辑。对我来说,每个分支都应该是原子的,并与其他分支分开。我错了吗?事实上,我发现git的行为非常有用,特别是因为我经常开始进行更改,然后意识到我更喜欢在不同的(通常是新的)分支上提交这些更改。(如果签出一个分支会导致对您进行本地修改的文件进行更改,git不会允许您切换分支。)我想这只是因为,在您实际提交一些更改之前,它们可以“浮动”——提交是将它们记录在历史记录中的行为。好的。这很有帮助!谢谢你的帮助!!