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恢复需要您想要删除的提交的id,并将其保留到历史记录中
Git重置需要你想要保留的提交,并将从历史记录中删除之后的所有内容。
也就是说,如果你在第一个提交id中使用revert,你会发现自己进入了一个空目录,并且在历史记录中有一个额外的提交,而使用reset你的目录将是..返回到最初的提交,您的历史记录就会像上次提交从未发生过一样。
更清楚的是,用这样的日志:
# git log --oneline
cb76ee4 wrong
01b56c6 test
2e407ce first commit
使用git恢复cb76ee4将默认将您的文件恢复到01b56c6,并将进一步提交到您的历史记录中:
8d4406b Revert "wrong"
cb76ee4 wrong
01b56c6 test
2e407ce first commit
Git重置01b56c6将把你的文件带回01b56c6,并从你的历史记录中清除任何其他提交:
01b56c6 test
2e407ce first commit
我知道这些是“基础”,但这对我来说很困惑,通过运行还原第一个id('第一次提交'),我期望找到我的初始文件,这需要一段时间来理解,如果你需要你的文件作为'第一次提交',你需要使用下一个id。