Why would I want to revert the staging area to a previous state, but not the working tree?
git reset --mixed(默认选项)将临时区域重置为以前的状态,但不重置工作树。
这看起来很奇怪。我什么时候想做?
另外,假设我作出了四项承诺:A、B、C和D。然后我向reset作出承诺。每次提交后,我都添加了一个文件。在执行git reset B后,我的集结区会是什么样子?
- 这看起来很奇怪。不是真的。使用--mixed(git reset的默认模式)的一个原因是,当您想要保留工作树的状态(本地更改)时,您要将分支重置为的提交可能会与之冲突。至于你的第二个问题,你为什么不自己试试玩具回购呢?实验是一种很好的学习方式。
say I made four commits: A, B, C and D. I then reset to B. With each commit, I added a file. What would my staging area look like after performing git reset B?
号
git reset首先移动头部。所以head现在指向B。
git reset --mixed也会重置索引(临时区域),因此索引会反射B。
这意味着git status将显示由C和D引入的所有修改(添加、删除或修改的文件),以便进行阶段性修改(因为工作树不变)。这可以让您有机会以不同的顺序,用更少或更多的提交来重做这些登台操作。
- 因此,如果我正确理解您的话,git reset --mixed的唯一用途是通过以不同的顺序或提交次数重新提交更改来更改分支提交历史记录?
- 如果我想改变实际的项目,也就是代码,git reset --mixed不是我需要的吗?
- @这是一种用法。这通常用于取消对添加到索引中的内容的排序,例如stackoverflow.com/q/17761896/6309或stackoverflow.com/a/6919749/6309(git reset --soft也可以使用:stackoverflow.com/q/5203535/6309)。我也经常使用git reset --hard来重置工作树。
- 因此,除了git reset --hard之外,git reset还用于分解事物,并"重写"分支历史。但不能更改实际代码。对的?
- @Avivcohn是的:工作树是未受影响的,因此当前代码确实保持不变。