我正在尝试为Git-Savvy Sublime扩展添加简洁的Git重置模式摘要.这个很难(硬!
我有这个:
mixed (default): update index soft: move branch pointer only hard: update index & working dir, discard local changes merge: update index & working dir, keep local changes keep: update index & working dir, abort if local changes
(希望它暗示分支指针在所有模式下都会移动.)
reset
模式周围的文档非常模糊,并使用短语"更新索引","触摸索引文件","重置索引"和"重置索引条目",无法知道它们是否是同义词.
是否有其他之间的细微差别--hard
,--merge
和--keep
?
好吧,因为我找不到对不同模式的完整的并排分析,我将使用希望用户更容易理解的语言来制作表格.我也包括在内git checkout
.
为清楚起见,"对...的影响"
"HEAD":HEAD在手术后指出的内容
"分支指针":如果我们当前在分支B的尖端,那么B指向之后
"空索引":在没有分阶段更改的情况下执行重置时会发生什么.
"跟踪文件":如果切换到影响它们的提交,是否将更改工作目录中的文件
"未跟踪文件":是否更改工作目录中未跟踪的文件.(剧透:没有)
清洁工作目录:
Effect on | soft | mixed | hard | merge | keep |checkout -----------------+---------------------------------------------|-------- HEAD | Move | Move | Move | Move | Move | Move Branch pointer | Move | Move | Move | Move | Move | - Empty index | Add* | - | - | - | - | - Tracked files | - | - | Change | Change | Change |Change Untracked files | - | - | - | - | - | -
工作目录(可能是暂存的)中的更改不受我们正在重置/签出的提交的影响.(例如,我们更改了file.txt,但是当前提交和我们要去的地方之间没有任何变化)
(-
表示"保持当前状态",Both
表示对同一文件的暂存和非暂停更改)
Staged changes | - | Unstage | Discard | Discard | Unstage| - Unstaged changes | - | - | Discard | - | - | - Both | - * | Unstage | Discard | Abort | Unstage| -
在工作目录的变化(可能上演),其是受提交我们重置/退房.有时表示为询问操作是否"工作目录安全".
Effect on | soft | mixed | hard | merge | keep |checkout -----------------+---------------------------------------------|-------- Staged changes | - | Unstage | Discard | Discard | Abort | Abort Unstaged changes | - * | - | Discard | Abort | Abort | Abort Both | - * | Unstage | Discard | Abort | Abort | Abort
--soft
git reset --soft X
将工作目录(包括当前HEAD)和X之间的更改转换为分阶段更改.Git的手册页反直觉地将其描述为"不接触索引文件".
当有阶段性更改时,--soft
将它们与新的分阶段更改结合起来.
当存在未分级的更改时,--soft
保留未分级的更改,但也会按上述方式进行新的更改.它是一致的但可能令人困惑.
git reset
这些问题定义了不同的模式:
是暂存的更改保留(soft
),非暂存(mixed
,keep
)或丢弃(merge
,hard
)
是工作目录更新always(hard
),仅当安全(keep
,merge
)或从不(soft
,mixed
)
是不相关的不分阶段变化保留(soft
,mixed
,merge
,keep
)或丢弃(hard
)
我对每个的最后简洁描述:
混合(默认):unstage staged,keep unstaged,do not touch working(safe)
软:只需移动HEAD,阶段差异(安全)
很难:丢弃上演,丢弃未分期,更新工作(不安全)
merge:discard staged,keep unstaged,update working(如果不安全则中止)
keep:unstage staged,keep unstaged,update working(如果不安全则中止)