Git 中的重置和恢复

Abdul Jabbar 2023年1月30日 2022年4月22日
  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 是相反的,因为它只能用于修改我们的仓库,而不是暂存区或本地工作副本。它不会影响我们推送的任何提交。

Author: 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