Discuss / Git / 最新的git合并了checkout和reset

最新的git合并了checkout和reset

Topic source

原来的git checkout 可以使用 git restore 代替

原来的git reset HEAD 可以使用 git restore --staged 代替

最新版的git提示都已经更换成了restore

JL珏落

#2 Created at ... [Delete] [Delete and Lock User]

zangcunlim

#3 Created at ... [Delete] [Delete and Lock User]

加:原来的git checkout branchName 可以用 git switch branchName 代替。

对的。可以让廖老师更新文档了,这让新手小白就不会蒙了。

顶。不过自己实际操作的时候应该能发现不同吧,按照git指示操作就是了

明天你好

#6 Created at ... [Delete] [Delete and Lock User]

情况1:在工作区做了修改,并未添加到暂存区,想撤销工作区的修改,用 git restore file;

情况2:在工作区做了修改,并用git add 添加到了暂存区,未提交;想撤销,分两步,1.先撤销暂存区的修改,用 git restore --staged file, 2.然后参考情况1撤销工作区的修改;

情况3:在工作区做了修改,且git add git commit添加并提交了内容,想撤销本次提交,直接用 git reset --hard HEAD^回退版本,即可保证工作区,暂存区,版本库都是上次的内容

Pray for

#7 Created at ... [Delete] [Delete and Lock User]

另外,“git restore 恢复工作区的修改”,这句话中的“修改”,指的是工作区当前文件,相对于最近一次commit的文件的修改。

Lisiur

#8 Created at ... [Delete] [Delete and Lock User]

Pray for

#7 Created at 7/10/2022 23:59

另外,“git restore 恢复工作区的修改”,这句话中的“修改”,指的是工作区当前文件,相对于最近一次commit的文件的修改。

这个描述不太对吧,不指定 source 的情况下,git restore 就是把暂存区的内容恢复到工作区,和历史区没有关系。

比如文件 test 内容为 A,已提交到历史库,工作区将 test 改为 AA,然后 add 到暂存区,工作区再将 test 改为 AAA,此时运行 git restore test,会把工作区的 test 改为 AA,而不是 A。

另外提一嘴,当暂存区没有内容时,其实表示的是暂存区和历史区是一致的,此时 git restore 也是可以看成是从暂存区恢复。

Lisiur

#9 Created at ... [Delete] [Delete and Lock User]

可以参考git restore 文档,里面有这么一段描述:

If not specified, the contents are restored from HEAD if --staged is given, otherwise from the index.

即在未给定 source 的情况下,如果使用 `--staged` ,从 `HEAD` 恢复,否则从 `index` 恢复。

这里的 `index` 就是暂存区。

另外再多说一句,文档还说了,如果指定 `--staged` 说明恢复暂存区,否则恢复工作区。因此可以这么解读上面一句话:

在未给定 source 的情况下,如果使用 `--staged` ,从 `HEAD` 恢复暂存区,否则从暂存区恢复工作区。

Lisiur

#10 Created at ... [Delete] [Delete and Lock User]

再多说一嘴,给定 source 的情况下,则按照 source 的历史库中的内容恢复。

比如上面举的例子中,

git restore test 会把工作区改为 AA

git restore --source HEAD test 会把工作区改为 A


  • 1
  • 2

Reply