核心命令:
接著就是把本地內容 Force Push 到遠端.
由於你現在本地的歷史已經和遠端的歷史出現分歧, 要推送到遠端時, 必須要 Force Push 才行, 也就是 -f 引數的用意.
如果你所謂的 "撤銷" 是說修改保留, 但提交取消, 步驟也是一樣的, 只是把 pick med 和 pick test2 這兩行的 pick 改成 squash, 儲存退出後根據提示, 重新編輯一下 commit message, 並完成剩下的操作. 這裡其實就是把 med 和 test2 這兩個提交合併到前一個提交中.
建議在操作的時候花點時間, 仔細閱讀一下 Interactive Rebase 時的提示, 理解 pick/squash, 以及更多的 fixup/edit 等的命令的功能和用法.
- - -
2013.11.30 更新:
之前的回答中已經建議去看下面的提示了, 裡面對 squash 的意義進行了解釋: meld into previous commit, 也就是"熔入前一個提交中", 所以是先 pick a, 使用 a 提交, 然後 squash b, 把 b 熔入前一個提交中.在 rebase 儲存退出後, 隨後的提示資訊是由 squash 命令觸發的, 此時你可以對熔合後的 commit message 進行編輯, 而不需要在結束後 git commit --amend.下面是我剛用自己的一個倉庫, 在最新的 git 1.8.5 版本下, 使用 squash 後的提示, 可以看到有非常詳細的提示說明. 隨著版本的演進, git 在文件和提示方面已經日益完善了, 絕大部分命令都可以在使用過程中得到詳細的指導, 請務必不要錯過.
核心命令:
以及:我理解你所謂的 "撤銷" 就是把這兩個提交引入的修改都刪除.首先是要在本地把這兩個提交刪除:用 git rebase -i 928582641a 指定 base 為你需要刪除的提交的前一個提交, 進入 Interactive Rebase刪除 pick med 和 pick test2 那兩行, 儲存退出. 之後可能 git 會提示出現 conflict, 根據提示完成處理.接著就是把本地內容 Force Push 到遠端.
執行 git push -f由於你現在本地的歷史已經和遠端的歷史出現分歧, 要推送到遠端時, 必須要 Force Push 才行, 也就是 -f 引數的用意.
如果你所謂的 "撤銷" 是說修改保留, 但提交取消, 步驟也是一樣的, 只是把 pick med 和 pick test2 這兩行的 pick 改成 squash, 儲存退出後根據提示, 重新編輯一下 commit message, 並完成剩下的操作. 這裡其實就是把 med 和 test2 這兩個提交合併到前一個提交中.
建議在操作的時候花點時間, 仔細閱讀一下 Interactive Rebase 時的提示, 理解 pick/squash, 以及更多的 fixup/edit 等的命令的功能和用法.
- - -
2013.11.30 更新:
之前的回答中已經建議去看下面的提示了, 裡面對 squash 的意義進行了解釋: meld into previous commit, 也就是"熔入前一個提交中", 所以是先 pick a, 使用 a 提交, 然後 squash b, 把 b 熔入前一個提交中.在 rebase 儲存退出後, 隨後的提示資訊是由 squash 命令觸發的, 此時你可以對熔合後的 commit message 進行編輯, 而不需要在結束後 git commit --amend.下面是我剛用自己的一個倉庫, 在最新的 git 1.8.5 版本下, 使用 squash 後的提示, 可以看到有非常詳細的提示說明. 隨著版本的演進, git 在文件和提示方面已經日益完善了, 絕大部分命令都可以在使用過程中得到詳細的指導, 請務必不要錯過.