git revert
git revert 是一種創建一次新的commit 來回退某次或某幾次commit的一種方式
命令
// 創建一個新的commit,這個commit會刪除(下面)commit-id的內容,但會在log中保留這個commit-id
git revert commit-id
// 批量回退 這個是前開后閉, 只revert了...和commit-id-end, commit-id-start沒有撤銷
git revert commit-id-start...commit-id-end
// 加上^ 就是前閉后閉,都撤銷了
git revert commit-id-start^...commit-id-end
ps: 沒有git revert 文件的操作,IDEA的撤銷文件修改的操作(revert)用的不是git revert
例子:
原始log
31f6a64 (HEAD -> master) 提交 3
98d937c 提交 2
af02354 提交 1
目錄下的內容為:
➜ revert_test git:(master) ls
1.txt
2.txt
3.txt
現在想刪除 98d937c 的提交
執行
git revert 98d937c
再看目錄下的內容為:
➜ revert_test git:(master) ls
1.txt
3.txt
說明確實去掉了98d937c 的提交內容(即2.txt 不在了)
再看日志:
d1ea1e9 (HEAD -> master) Revert "提交 2"
31f6a64 提交 3
98d937c 提交 2
af02354 提交 1
發現,其實是通過一次新的提交來刪除98d937c 的提交內容的(這里可以看出之前的commit-id依然在)
再看批量回退
日志記錄
a74b9bb (HEAD -> master) 提交 6
e3bbc59 提交 5
223171c 提交 4
d1ea1e9 Revert "提交 2"
31f6a64 提交 3
98d937c 提交 2
af02354 提交 1
現在回退 提交4 和提交5
執行
git revert 223171c^...e3bbc59
看日志
af51f68 (HEAD -> master) Revert "提交 4"
1a5d0c0 Revert "提交 5"
a74b9bb 提交 6
e3bbc59 提交 5
223171c 提交 4
d1ea1e9 Revert "提交 2"
31f6a64 提交 3
98d937c 提交 2
af02354 提交 1
產生了兩次revert提交commit