git 撤銷 commit,並推送到遠程

reset與revert的區別

  1. git revert是用一次新的commit來回滾之前的commit,git reset是直接刪除指定的commit。
  2. 在回滾這一操作上看,效果差不多。但是在日後繼續merge以前的老版本時有區別。因爲git revert是用一次逆向的commit“中和”之前的提交,因此日後合併老的branch時,導致這部分改變不會再次出現,但是git reset是之間把某些commit在某個branch上刪除,因而和老的branch再次merge時,這些被回滾的commit應該還會被引入。
  3. git reset 是把HEAD向後移動了一下,而git revert是HEAD繼續前進,只是新的commit的內容和要revert的內容正好相反,能夠抵消要被revert的內容。

 

Git本地及遠程分支回退

1. git本地版本回退

Git reset --hard commit_id(可用 git log –oneline 查看)

2. git遠程版本回退

git push origin HEAD --force #遠程提交回退

下面的命令也可以實現遠程版本回退

git reset --hard HEAD~1
git push --force

3. git reverse和git reset的區別

  • git revert是用一次新的commit來回滾之前的commit,git reset是直接刪除指定的commit。
  • 在回滾這一操作上看,效果差不多。但是在日後繼續merge以前的老版本時有區別。因爲git revert是用一次逆向的commit“中和”之前的提交,因此日後合併老的branch時,導致這部分改變不會再次出現,但是git reset是之間把某些commit在某個branch上刪除,因而和老的branch再次merge時,這些被回滾的commit應該還會被引入。
  • git reset 是把HEAD向後移動了一下,而git revert是HEAD繼續前進,只是新的commit的內容和要revert的內容正好相反,能夠抵消要被revert的內容。

git reset + commit號

git reset命令後面是需要加2種參數的:
”–hard””–soft”

這條命令默認情況下是”–soft”。執行上述命令時,這該條commit號之 後(時間作爲參考點)的所有commit的修改都會退回到git緩衝區中。

使用git status命令可以在緩衝區中看到這些修改。而如果加上”–hard”參數,則緩衝區中不會存儲這些修改,git會直接丟棄這部分內容。

但需要注意的一 個問題是:由於這樣的重置是直接在本地的修改,無法提交到遠程服務器,如果直接丟棄的內容已經被推到遠程服務器上了,則會造成本地和服務器無法同步的問題。

即git reset –hard只能針對本地操作,不能針對遠程服務器進行同樣操作。如果從本地刪掉的內容沒有推到服務器上,則不會有副作用;如果被推到服務器,則下次本地和 服務器進行同步時,這部分刪掉的內容仍然會回來。

而上面注意中提到的問題則可以很好的被git revert 命令解決。

git revert + commit 號
該命令撤銷對某個commit的提交,這一撤銷動作會作爲一個新的修改存儲起來,這樣,當你和服務器同步時,就不會產生什麼副作用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章