撤消已被推送到遠程倉庫的Git中的特定提交

撤消特定提交的最簡單方法是: git

  • 不在腦殼或頭部
  • 已被推到遙控器。

由於若是它不是最新的提交, svn

git reset HEAD

不起做用。 並且由於它被推到了遙遠的地方, spa

git rebase -i

code

git rebase --onto

將致使遙控器出現一些問題。 get

更重要的是,我不想真正修改歷史。 若是有錯誤的代碼,它就在歷史中能夠看到。 我只想在工做副本中使用它,我不介意反向合併提交。 hash

換句話說,如下svn命令的Git等價物是什麼: it

svn merge -r 303:295 http://svn.example.com/repos/calc/trunk

經過反向合併這些修訂中的全部更改,將全部更改從295移除到302,做爲新提交。 io

svn merge -c -302 ^/trunk

固然,經過添加另外一個反向合併來自相應提交的更改的提交來撤消302提交。 bug

我認爲它應該是一個至關簡單的Git操做和一個至關常見的用例。 原子提交還有什麼意義? 方法

咱們已經舉辦藏起來 ,並要保證的提交是徹底原子,你不該該可以很容易地撤銷這些原子提交的一個或多個?


#1樓

我不喜歡git revert所作的自動提交,因此這可能對某些人有幫助。

若是您只想讓修改後的文件不是自動提交 ,則可使用--no-commit

% git revert --no-commit <commit hash>

這與-n相同

% git revert -n <commit hash>

#2樓

由於它已被推送,因此你不該該直接操縱歷史。 git revert將使用新提交從提交中恢復特定更改,以便不操縱提交歷史記錄。


#3樓

使用git log識別提交的哈希值,而後使用git revert <commit>建立一個刪除這些更改的新提交。 在某種程度上, git revertgit cherry-pick相反 - 後者將補丁應用於缺乏它的分支,前者將其從具備它的分支中移除。

相關文章
相關標籤/搜索