"恢复","修改","回滚"和"撤消"提交之间有什么区别?

gos*_*sbi 14 git undo rollback git-amend git-revert

虽然我经常使用Git,但我还是初学者.

有时,我犯了一个错误,但只有我提交之后才发现它.在那时,我通常不得不花费很长时间在互联网上寻找我应该用来摆脱它的命令(在推送之前).

每当发生这种情况时,我发现自己想知道我经常遇到的四个术语之间的区别是什么:

  • 还原,
  • 修改,
  • 回滚,
  • 撤消.

我认为现在是时候一劳永逸地学习这些差异了.这些是什么?

jub*_*0bs 13

恢复修改的术语在Git中具有明确的含义.相反,回滚撤消没有这么明确的含义,并且可以解释.

恢复提交......

...意味着创建(在当前分支上)一个新的提交,它应用另一个提交引入的反向更改.这是纠正已与其他人共享的回购中问题的首选方法,因为它不涉及任何破坏(即重写历史记录).

要恢复标识的提交<commit>,只需运行即可

    git revert <commit>
Run Code Online (Sandbox Code Playgroud)

修改提交...

...表示用具有相同父代的新"提交"替换"当前"提交; 更多细节在git commit --amend如何正常工作?

在此输入图像描述

意识到

  • 修改你已经推送到共享远程的提交是不好的做法,因为它是历史重写的一种形式(它"删除"最近的提交,你的协作者可能已经根据他们的工作);
  • 你只能修改给定分支上的最后一次提交; 要重写旧的提交,你需要带出大枪(例如交互式rebase).

    要修改提交,请进行所有必需的更改并暂存,然后运行

    git commit --amend
    
    Run Code Online (Sandbox Code Playgroud)

    这里不需要指定任何提交,因为当前分支上的最后一次提交是将要修改的提交.然后会弹出您的编辑器,让您有机会修改提交消息.

滚回来...

...通常意味着丢弃(或存储)任何本地更改并将分支重置为提交(或简单地检查提交,但这使得您处于分离-HEAD状态),然后提交事件开始变得混乱.使用

    git reset <commit-before-things-started-to-go-belly-up>
Run Code Online (Sandbox Code Playgroud)

撤消提交...

...可能意味着,根据上下文,还原修改提交.


Pre*_*raj 9

撤消更改: git checkout, git revert, git reset,git clean

  • git revert:此命令恢复提交的更改。它在日志中维护跟踪记录。

  • git reset:此命令恢复提交的更改。它不会在日志中维护跟踪记录,即重置为恢复的提交。注意:这是一个破坏性的功能。必须小心使用此命令。

  • git reset --soft HEAD^ 撤消上次提交,将更改放入暂存阶段

  • git reset --hard HEAD^ 撤消上次提交和所有更改

  • git reset --hard HEAD^^ 撤消最后 2 次提交和所有更改

  • git commit --amend其中修改意味着添加到最后一次提交。有时我们忘记添加要提交的文件。例如的abc.txt文件忘了,我们可以添加如下: git add abc.txtgit commit --amend -m "New commit message"

注意:我们没有对这个确切名称的动词或选项进行回滚撤消