我在一个功能分支上,工作目录很干净,并且没有未提交的未分级或暂存的更改。
然后我希望撤消几个提交。所以我跑了
git reset HEAD~3
然后我通过运行git status
找到了一些未分级的更改。
未分期更改的来源是什么?
Isn' t git reset HEAD~3
是否应撤消三次提交以返回第四次最新提交并将工作目录更新为与第四次最新提交相同?
感谢。
答案 0 :(得分:3)
运行Original_query_taxid kingdom phylum class order family genus species
1204725 Methanobacterium formicicum Methanobacteriaceae Euryarchaeota
Methanobacteria Methanobacteriales Methanobacterium <not present>
2162 Methanobacterium formicicum Methanobacteriaceae Euryarchaeota
Methanobacteria Methanobacteriales Methanobacterium <not present>
1300163 Methanobacterium formicicum Methanobacteriaceae Euryarchaeota
Methanobacteria Methanobacteriales Methanobacterium <not present>
420247 Methanobrevibacter smithii Methanobacteriaceae Euryarchaeota
Methanobacteria Methanobacteriales Methanobrevibacter <not present>
时,它会撤消最后3次提交并保留本地最后3次提交的更改(默认情况下为git reset HEAD~3
)。
- mixed重置索引但不重置工作树(即,保留更改的文件但未标记为提交)并报告尚未更新的内容。这是默认操作。
您可以运行mixed reset
来放弃最近3次提交的所有更改。
答案 1 :(得分:2)
git reset HEAD~3
会将当前分支的提示重置为最后一次提交,同时将更改从三次提交移回到暂存区域。
要达到预期效果,您需要git reset --hard HEAD~3
。
答案 2 :(得分:1)
git reset HEAD~3
确实是git reset --mixed HEAD~3
。
git reset
必须将三件事重置为所选的提交:
分支头始终处于重置状态。 --soft
,--mixed
和--hard
以加密方式控制暂存区域和工作副本是否也会重置。
--soft
只重置分支头。--mixed
也会重置暂存区域。--hard
重置暂存区和工作副本。 git reset HEAD~3
默认为--mixed
,因此它会将分支移动到HEAD~3
以及暂存区域的内容,但工作副本将保持不变。这会导致明显修改过的非暂存文件,但它们实际上只是您重置之前在工作副本中的内容(即。HEAD
加上您所做的任何编辑)。
您可以使用git checkout .
将其删除。
通常您希望git reset --hard HEAD~3
一次重置所有内容。
我建议使用一些别名来清楚说明这些内容的用途并避免拼写错误。
redo = reset --soft HEAD^
在最后一次提交被破坏时使用,并且您想再次执行此操作。由于保留了工作副本和暂存区域,因此将在上次提交之前将repo重置为。
或者您可以执行git commit --amend
来更改先前的提交。
undo = reset --hard HEAD^
完全抛弃最后一次提交。
clear = reset --hard HEAD
抛弃所有未提交的作品。那是临时区域和工作副本。当你让回购进入一个奇怪的状态时很方便。