撤消特定提交的最簡單方法是: 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操做和一個至關常見的用例。 原子提交還有什麼意義? 方法
咱們已經舉辦藏起來 ,並要保證的提交是徹底原子,你不該該可以很容易地撤銷這些原子提交的一個或多個?
我不喜歡git revert
所作的自動提交,因此這可能對某些人有幫助。
若是您只想讓修改後的文件不是自動提交 ,則可使用--no-commit
% git revert --no-commit <commit hash>
這與-n
相同
% git revert -n <commit hash>
由於它已被推送,因此你不該該直接操縱歷史。 git revert
將使用新提交從提交中恢復特定更改,以便不操縱提交歷史記錄。
使用git log
識別提交的哈希值,而後使用git revert <commit>
建立一個刪除這些更改的新提交。 在某種程度上, git revert
與git cherry-pick
相反 - 後者將補丁應用於缺乏它的分支,前者將其從具備它的分支中移除。