Git 中的重置和恢复

Abdul Jabbar 2023年1月30日
  1. Git restore 命令
  2. Git 重置命令
  3. git resetgit restore 之间的区别
Git 中的重置和恢复

Git 有一些命令可以处理单个文件,但它们很少见。这些命令是 git addgit rmgit mvgit checkoutgit resetgit restore,以及它们各自的对立面。

不过,Git 很聪明。它会记住我们从哪里获取了我们已经获取的工作,以便它可以稍后从下一个获取标记再次获取它。这意味着我们可以拥有一个仅包含我们在本地创建的提交的 Git 仓库。如果我们已经从另一个仓库中获取了相同的提交,Git 可以避免再次获取它们。

在本文中,我们将讨论 Git 的两个重要命令:

  1. git restore
  2. 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 resetgit 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 Jabbar
Abdul Jabbar avatar Abdul Jabbar avatar

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

相关文章 - Git Reset

相关文章 - Git Restore