当前位置:  开发笔记 > 开发工具 > 正文

所有Git重置模式之间究竟有什么区别?

如何解决《所有Git重置模式之间究竟有什么区别?》经验,为你挑选了1个好方法。

我正在尝试为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



1> Steve Bennet..:

好吧,因为我找不到对不同模式的完整的并排分析,我将使用希望用户更容易理解的语言来制作表格.我也包括在内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(如果不安全则中止)

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有