git如何恢复使用?
这听起来像是一个重复的问题,但当人们问这个问题时,通常的回答是,使用git reset,就像在git中通过SHA散列恢复到提交一样。
然后,当有人问如何使用git重置时,人们会回答说你应该使用git revert as per git -如何回滚。
在你意识到之前,八个不同的人出现了,他们用自己独特的方法来救OP的屁股,所有这些都超出了你的理解范围。
所以让我们试着坚持简短和写一个傻瓜指南git恢复。
一个场景:你承诺了两次master,结果很糟糕。你在推波助澜,别人也有你的坏改变。
你想要撤销它。这不是你可以自己在代码中手工撤销的东西,比如一些向导或包管理器在各处更改了大量的东西——你只想把它都放回原来的样子。
这就是源代码控制的意义所在。我相信这很简单。
你会用到git revert,怎么用呢?
在运行git恢复之后,你还需要做其他事情吗?你必须提交恢复所做的更改还是恢复直接提交到存储库还是什么??
显然,你需要再次用力,可能还会向团队宣布你的决定。
Git会进行一次新的提交
Git还原只是创建一个与现有提交相反的新提交。
它使文件处于相同的状态,就好像已经恢复的提交从未存在过一样。例如,考虑以下简单的例子:
$ cd /tmp/example
$ git init
Initialized empty Git repository in /tmp/example/.git/
$ echo "Initial text" > README.md
$ git add README.md
$ git commit -m "initial commit"
[master (root-commit) 3f7522e] initial commit
1 file changed, 1 insertion(+)
create mode 100644 README.md
$ echo "bad update" > README.md
$ git commit -am "bad update"
[master a1b9870] bad update
1 file changed, 1 insertion(+), 1 deletion(-)
在这个例子中,提交历史有两次提交,最后一次是错误的。使用git恢复:
$ git revert HEAD
[master 1db4eeb] Revert "bad update"
1 file changed, 1 insertion(+), 1 deletion(-)
日志中会有3次提交:
$ git log --oneline
1db4eeb Revert "bad update"
a1b9870 bad update
3f7522e initial commit
所以发生的事情有一个一致的历史记录,但文件似乎从来没有发生过糟糕的更新:
cat README.md
Initial text
要还原的提交在历史记录中的哪个位置并不重要(在上面的例子中,还原的是最后一次提交——任何提交都可以还原)。
关闭问题
之后你还有别的事要做吗?
git还原只是另一种提交,例如,推到远程,以便其他用户可以提取/获取/合并更改,然后你就完成了。
你必须提交还原所做的更改还是还原直接提交到回购?
Git还原是一个提交——假设还原单个提交是你想做的,没有额外的步骤。
显然你需要再推一次,可能还要向团队宣布。
实际上——如果远程处于不稳定状态——与团队的其他成员沟通他们需要拉取以获得修复(还原提交)将是正确的事情:)。
Git会进行一次新的提交
Git还原只是创建一个与现有提交相反的新提交。
它使文件处于相同的状态,就好像已经恢复的提交从未存在过一样。例如,考虑以下简单的例子:
$ cd /tmp/example
$ git init
Initialized empty Git repository in /tmp/example/.git/
$ echo "Initial text" > README.md
$ git add README.md
$ git commit -m "initial commit"
[master (root-commit) 3f7522e] initial commit
1 file changed, 1 insertion(+)
create mode 100644 README.md
$ echo "bad update" > README.md
$ git commit -am "bad update"
[master a1b9870] bad update
1 file changed, 1 insertion(+), 1 deletion(-)
在这个例子中,提交历史有两次提交,最后一次是错误的。使用git恢复:
$ git revert HEAD
[master 1db4eeb] Revert "bad update"
1 file changed, 1 insertion(+), 1 deletion(-)
日志中会有3次提交:
$ git log --oneline
1db4eeb Revert "bad update"
a1b9870 bad update
3f7522e initial commit
所以发生的事情有一个一致的历史记录,但文件似乎从来没有发生过糟糕的更新:
cat README.md
Initial text
要还原的提交在历史记录中的哪个位置并不重要(在上面的例子中,还原的是最后一次提交——任何提交都可以还原)。
关闭问题
之后你还有别的事要做吗?
git还原只是另一种提交,例如,推到远程,以便其他用户可以提取/获取/合并更改,然后你就完成了。
你必须提交还原所做的更改还是还原直接提交到回购?
Git还原是一个提交——假设还原单个提交是你想做的,没有额外的步骤。
显然你需要再推一次,可能还要向团队宣布。
实际上——如果远程处于不稳定状态——与团队的其他成员沟通他们需要拉取以获得修复(还原提交)将是正确的事情:)。
之所以在同一对话中经常出现reset和revert,是因为不同的版本控制系统使用它们来表示不同的事情。
特别是那些习惯了Subversion或Perforce的人,他们想要丢弃对文件未提交的更改,通常会在被告知他们实际上需要重置之前使用revert。
类似地,在其他vcs中等价的恢复通常被称为回滚或类似的东西-但“回滚”也可以表示“我想完全放弃最后几次提交”,这适用于重置而不是恢复。因此,人们知道他们想做什么,但不清楚他们应该使用哪个命令,这有很多困惑。
至于你关于恢复…
你会用到git revert,但是怎么用呢?
Git恢复first-bad-commit^..last-bad-commit
注意^字符表示第一次错误提交。这是引用first-bad-commit的父类,因为恢复范围不包括开始提交。
在运行git恢复之后,你还需要做其他事情吗?你必须提交恢复所做的更改还是恢复直接提交到存储库还是什么??
默认情况下,git revert会提示您输入一个提交消息,然后提交结果。这可以被覆盖。我引用手册页:
--edit
With this option, git revert will let you edit the commit message prior to committing the revert. This is the default if you run the command from a terminal.
--no-commit
Usually the command automatically creates some commits with commit log messages stating which commits were reverted. This flag applies the changes necessary to revert the named commits to your working tree and the index, but does not make the commits. In addition, when this option is used, your index does not have to match the HEAD commit. The revert is done against the beginning state of your index.
This is useful when reverting more than one commits' effect to your index in a row.
特别是,在默认情况下,它为您要还原的每个提交创建一个新的提交。您可以使用revert—no-commit来创建更改,在不将这些更改作为单独的提交提交的情况下恢复所有更改,然后在空闲时提交。