git如何恢复使用?
这听起来像是一个重复的问题,但当人们问这个问题时,通常的回答是,使用git reset,就像在git中通过SHA散列恢复到提交一样。
然后,当有人问如何使用git重置时,人们会回答说你应该使用git revert as per git -如何回滚。
在你意识到之前,八个不同的人出现了,他们用自己独特的方法来救OP的屁股,所有这些都超出了你的理解范围。
所以让我们试着坚持简短和写一个傻瓜指南git恢复。
一个场景:你承诺了两次master,结果很糟糕。你在推波助澜,别人也有你的坏改变。
你想要撤销它。这不是你可以自己在代码中手工撤销的东西,比如一些向导或包管理器在各处更改了大量的东西——你只想把它都放回原来的样子。
这就是源代码控制的意义所在。我相信这很简单。
你会用到git revert,怎么用呢?
在运行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来创建更改,在不将这些更改作为单独的提交提交的情况下恢复所有更改,然后在空闲时提交。
这个问题很老了,但仍然让人(比如我)感到困惑
作为一个初学者,在经历了一些试验和错误(错误比试验更多)后,我得到了一个重要的观点:
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。
之所以在同一对话中经常出现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来创建更改,在不将这些更改作为单独的提交提交的情况下恢复所有更改,然后在空闲时提交。