Git 中的重置和恢复
Git 有一些命令可以处理单个文件,但它们很少见。这些命令是 git add
、git rm
、git mv
、git checkout
、git reset
、git restore
,以及它们各自的对立面。
不过,Git 很聪明。它会记住我们从哪里获取了我们已经获取的工作,以便它可以稍后从下一个获取标记再次获取它。这意味着我们可以拥有一个仅包含我们在本地创建的提交的 Git 仓库。如果我们已经从另一个仓库中获取了相同的提交,Git 可以避免再次获取它们。
在本文中,我们将讨论 Git 的两个重要命令:
git restore
git reset
Git restore
命令
Git restore
命令用于从索引或另一个提交中恢复工作树中的文件。此命令不会更新当前分支。它还可以从另一个提交中恢复索引中的文件。如果我们想使用与当前分支上的提交不同的提交中的代码,这将非常有用。restore
命令有助于丢弃本地分支中未提交的本地更改。
Git restore
可以在三种不同的情况下使用,具体取决于当前情况,我们是否希望恢复工作副本或索引中的工作,或两者兼而有之。
git restore [--worktree] <file>
上面的命令将覆盖我们工作副本中的 <file>
以及索引文件中的内容。或者我们可以说它恢复了我们在工作副本中所做的更改。我们是否指定它并不重要,因为如果我们不另外说,它是建议性的。
git restore --staged <file>
上面的命令将使用本地仓库中的当前 HEAD 覆盖索引文件中的 <file>
。或者我们可以说未提交的更改最近上演的内容。如果我们说它确实等于旧的 git reset HEAD <file>
,那不会错。
git restore --staged --worktree --source HEAD <file>
如上所述,要使用当前 HEAD 覆盖工作副本和索引,我们使用上述命令。这个版本将能够做到这两点:将我们的工作副本恢复到 HEAD 以及从当前本地分支恢复未暂存的最近暂存的工作。
Git 重置
命令
Git reset
是关于更新我们的分支,移动提示以从分支中添加或删除提交。此操作更改提交历史记录。Git reset
用于恢复索引,与 Git restore
重叠。如果文件被更改,无论是通过使用手动编辑还是通过 git add 方法,git reset
都不能很好地处理它。
该文件被复制到新提交,然后在旧提交中标记为已删除。它会发出警告,表明该文件似乎已从工作副本中删除。Git reset 也不能很好地处理重命名。这并不意味着删除文件并添加同名文件,但确实如此。
reset
命令不能用于移动工作副本中的文件。这些文件不仅被复制到不同的提交;它们从工作副本中删除并在目标提交中恢复为新文件。当我们对文件进行了不必要的更改时,没有必要删除该文件。我们可以撤消对文件的所有更改,但它不会撤消文件本身。
git reset
和 git restore
之间的区别
restore
命令帮助我们取消暂存或丢弃未提交的本地更改。它可用于从索引或其他提交恢复工作树中的文件。此命令不会更新我们的分支。从另一个提交中恢复索引中的文件也很有帮助。
Git reset
用于更新当前分支。恢复索引也很有帮助,与 git restore 相交。Git reset
用于重置索引以丢弃工作树中的更改。此命令不会更新我们的分支。它主要与 --soft
选项一起使用,该选项仅重置索引并保持工作树不变。如果我们暂存了不想丢弃的更改,这将很有用。
如果工作目录是干净的(没有要提交的更改),Git reset
将成功完成,而如果工作目录是干净的,则 Git Restore
将失败。两者都会影响 HEAD。然而,Git restore
只会通过暂存区间接影响 HEAD。Git reset
可以直接使用索引和 HEAD。两者都会影响 HEAD。Git restore
只会通过暂存区间接影响索引和 HEAD。
仅当我们还没有推送任何内容时,Git reset
才能用于修改本地仓库。如果我们已经推送到远程服务器,git-reset 将修改暂存区和工作副本,但不会修改仓库。如果我们想撤消本地更改但不想再次重新引入它们,这很有用。
Git restore
是相反的,因为它只能用于修改我们的仓库,而不是暂存区或本地工作副本。它不会影响我们推送的任何提交。
Abdul is a software engineer with an architect background and a passion for full-stack web development with eight years of professional experience in analysis, design, development, implementation, performance tuning, and implementation of business applications.
LinkedIn