撤銷 git commit --amend
撤銷 git commit --amend
轉載:https://segmentfault.com/a/1190000014272359
想必大家都知道 git commit --amend
這條實用命令, 其可以用來修改最後一條提交的 commit message, 也可以追加新的修改.
但有時候不小心 amend 了錯誤的內容, 如何回退呢?
普通青年一般會用 git reset
撤銷到上一個提交, 再重新 git commit
一次, 這固然是可以的.
但如果工作區此時已經改的面目全非, 這時如果執行 git reset
, 就很難分的清哪些內容屬於被撤銷的提交了. 嗯, 這位同學說這種情況可以用 git stash
來處理, 是可以解決問題的.
但是, 身為文藝青年, 怎麼能用這麼不優(zhuang)雅(bi)的方法呢.
先上結論:
如果只 amend 了一次, 那麼直接用 git reset HEAD@{1}
就可以撤銷這次 amend. 如果 amend 多次, 就參考 git reflog
進行撤銷.
下面以例項介紹如何就地撤銷 git commit --amend
.
製造事故現場
首先製造事故現場. 追加空行到專案中的 index.html 檔案下:
$ echo "" >> index.html
$ git add .
$ git commit -m "add blank line to index.html"
然後再加一行到 index.html, 並 amend 一下:
$ echo "this line would break the code" >> index.html
$ git add .
$ git commit --amend
現場已經出現, 我們要撤銷 amend 的那個提交.
撤銷 amend
首先使用 git reflog
命令檢視操作記錄:
$ git reflog
c1c1b21 HEAD@{0}: commit (amend): add blank line to index.html
9ff821d HEAD@{1}: commit: add blank line to index.html
b078331 HEAD@{2}: commit: no more commit!
b86e902 HEAD@{3}: commit: so many commit
77e6ce9 HEAD@{4}: commit: this is another commit
ccde039 HEAD@{5}: commit: this is a commit
a49dcf4 HEAD@{6}: clone: from ssh://liux@xxx.xx.xx.xxx:29418/git_test.git
看到 amend 操作之前的最後一個操作就是 HEAD@{1}
.
現在可以用 git reset
將當前分支的 HEAD 指向 HEAD@{1}
, 即可達到撤銷 amend 的目的:
$ git reset --soft HEAD@{1}
$ git status
On branch master
Your branch is ahead of 'origin/master' by 5 commits.
(use "git push" to publish your local commits)
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: index.html
隨即使用 git status
檢視狀態, 發現 amend 的內容已經被撤銷 (到工作區) 了.
如果想撤銷到暫存區, 就用 git reset --soft HEAD@{1}
.
如果想幹掉這個修改, 就用 git reset --hard HEAD@{1}
.
這和 git reset
操作 commit 的情形是一樣的.
如果一個 commit 被 amend 了多次, 也可以用這種方法撤銷到任意一次 amend 處:
$ git reflog
937fd53 HEAD@{0}: commit (amend): add blank line to index.html
7589755 HEAD@{1}: commit (amend): add blank line to index.html
f7ade82 HEAD@{2}: commit (amend): add blank line to index.html
c1c1b21 HEAD@{3}: commit (amend): add blank line to index.html
9ff821d HEAD@{4}: commit: add blank line to index.html
$ git reset --soft HEAD@{2}
可以看出, 不止是 amend 操作, 其他操作也可以用這種方法進行撤銷.
相關文章
- 撤銷 git commit –amendGitMIT
- git commit --amendGitMIT
- Git commit 之後,想撤銷 commitGitMIT
- git 中撤銷已commit 的GitMIT
- Git 實用操作:撤銷 Commit 提交GitMIT
- 使用 Git 撤銷 Commit,但未 Git Push 的命令GitMIT
- git撤銷某一次commit提交GitMIT
- git commit 錯誤的程式碼之後的撤銷GitMIT
- git撤銷命令Git
- git進階(撤銷pull、撤銷merge、撤銷add)Git
- git如何撤銷已經提交到遠端的commit資訊GitMIT
- 如何撤銷 Git 操作?Git
- Git命令(撤銷更改)Git
- Git中撤銷提交Git
- 撤銷git addGit
- git撤銷修改操作Git
- git撤銷已經提交到遠端伺服器的commitGit伺服器MIT
- git各種撤銷提交Git
- 撤銷rebase與git原理Git
- git 撤銷相關操作Git
- Git各種撤銷操作Git
- Git 系列教程(7)- 撤銷操作Git
- Reviewbot 開源 | 有些 git commit 記錄真的不敢恭維, 我推薦每位工程師都常用 git rebase 和 git commit --amendViewGitMIT工程師
- git 入門教程之撤銷更改Git
- Git 撤銷修改和版本回退Git
- 從撤銷 rebase 談談 git 原理Git
- git add 新增錯檔案 撤銷Git
- 撤銷操作 —— Git 學習筆記 12Git筆記
- Reviewbot 開源 | 有些同學的 git commit 記錄真的不敢恭維, 我推薦每位工程師都常用 git rebase 和 git commit --amendViewGitMIT工程師
- 【吐血整理】Git的各種撤銷姿勢Git
- Git study Day01 暫存區, 撤銷Git
- 如何在 Git 裡撤銷(幾乎)任何操作Git
- 網頁撤銷後ubuntu本地撤銷網頁Ubuntu
- 『現學現忘』Git基礎 — 23、Git中的撤銷操作Git
- 無廢話Git——本地伺服器提交撤銷Git伺服器
- Git如何撤銷某次分支的合併MergeGit
- Git 優雅的撤銷中間某次提交(包括 merge)Git
- 記錄一次誤刪操作,分享使用 Git 撤銷修改Git