Git撤消对存储库

时间:2015-06-01 13:17:34

标签: git

有时我只是犯了一个错误并用Git做了一些我不想要的事情:

  • 提交错误代码
  • 创建名称不正确的分支
  • git rebase期间修复合并冲突后提交,而不是仅添加文件并运行git rebase --continuelike here
  • 其他可能的误用

是否可以将git repository(.git目录)放在版本控制本身下,然后编写一个脚本来使“git undo”这样的命令成为可能?有没有人以前做过?或者这是个坏主意,还有更简单的东西吗?

3 个答案:

答案 0 :(得分:1)

这是学习git的绝佳资源。这是一些有用的撤消命令:

  

当你过早地提交时,会发生一个常见的动词   可能忘记添加一些文件,或者搞砸了提交消息。   如果您想再次尝试该提交,可以使用   --amend选项:

git commit --amend
  

此命令将占用您的暂存区域并将其用于提交。如果   自上次提交以来,您没有做任何更改(例如,您运行   在您之前的提交之后立即执行此命令),然后是您的   快照看起来完全一样,所有你改变的就是你的   提交消息。

来源:https://git-scm.com/book/en/v2/Git-Basics-Undoing-Things

答案 1 :(得分:1)

  

有时我只是犯了一个错误并用Git做了一些我不想要的事情:

     
      
  • 提交错误代码
  •   

您可以使用 git-reset 轻松撤消上次提交,但不建议使用已发布的代码执行此操作。

git reset --soft HEAD^

(注意:您可以使用另一个答案中提到的git commit --amend立即重置和提交。)

您可以创建一个撤消前一个提交的新提交,它可以很好地处理已发布的代码。

git revert
  
      
  • 创建名称不正确的分支
  •   

您只需删除它即可撤消创建本地分支。

git branch -D <name>

您也可以通过删除它来撤消远程分支。

git push <remote> :<name>
  

是否可以将git存储库(.git目录)置于版本控制本身之下,然后编写一个脚本来生成类似&#34; git undo&#34;的命令。可能?有没有人以前做过?或者这是个坏主意,还有更简单的东西吗?

没有必要在版本控制中使用.git,它有自己的内部版本控制机制,如上所述。当事情变得更糟时,您始终可以使用名为 git-reflog 的低级工具跟踪参考更改。

您可能会考虑全局 git-undo 命令的可能性。但是在Git中,很明显哪些操作是本地的,哪些是远程的。发布更改后,通常不希望破坏提交的连续性。因此,理论上用户友好的历史安全撤消命令必须考虑到这一点,实际上必须遵循特定的工作流程。在Git之上肯定有很多工作流专用工具的空间,但工具本身几乎是工作流中立的。

答案 2 :(得分:-1)

问题非常有趣,但我认为你的问题无法解决。

1)无法跟踪.git目录本身(至少使用git)。 跟踪git一些其他版本控制根本不实用。 即使您可以在何时停止跟踪版本控制跟踪。

您应该跟踪原始曲目的跟踪吗?这创造了无穷无尽的曲目轨道。

2)git非常适合处理&#34;错误&#34;如果你在当地做过记住之后撤消和改变事物的所有命令需要一些时间,但是如果你掌握了它们,你将变得更快。 至少可以通过跟踪版本控制的版本控制来加快速度。