除了在local reset後再push之外 有沒有在remote直接reset之類的呢? 意義是不想remote有過多commit comment
学习是最好的投资!
沒有,只能 git reset --hard 然后 git push -f。
git reset --hard
git push -f
你的問題詢問的是如何撤銷remote 的commit,唯一的辦法就是本地修正然後又強制推送,並且很多人都已經提到,強制推送是非常壞的實踐,除非必要或者個人未公開項目或者小團隊專案(溝通成本較低)才可行。
看了你給別的回答的評論,似乎你想清理提交歷史,那麼 git 相比於其它 VCS 在這方面絕對是非常在行的。你可以使用 git rebase 命令对历史进行重构,可以重新排序、合并、拆分一些提交,总之完全足够清理你所谓的脏历史。如果你想要对整个历史做某些确定的修改,还有 git fileter-branch 指令可用,非常靈活,相當值得深入。
git rebase
git fileter-branch
說說我的提交流程吧,我一般是對一個文件進行修改直到達到我的目的後才開始進行提交,這個時候我也不是只直接做一次提交,而是使用vim 和vim-fugitive 插件,在diff 模式下開啟工作區和暫存區,然後在暫存區重新一步一步的重現我的修改,在適當的時候進行提交。由於我已經完成了整個修改,所以我很清楚每個修訂該誰先誰後,所以能夠做到比較乾淨清晰和“原子性”(即一個提交只做一個特定的修改,而不是混合若干個修改)的提交,方便其他人進行程式碼審閱。
——————
最後,希望注意,SF 不同於國內的論壇模式,不是一問一答再問再答的方式。如果你覺得需要補充你的問題,直接修改問題即可,這樣所有關注的人都會得到通知。如果你只在別的回答的評論裡面進行問題的更新和補充,沒有人會得到通知的。
請認真對待上傳到網上的東西. 那都是歷史, 要尊重歷史, 你可以在本地隨便調戲你的記錄. 一旦你將他發布, 他就會成為互聯網上的歷史, 必須要尊重的歷史.
折騰了半天我就是想說, 上傳之後就不應該更改了. 你這個想法是有問題的.
我的做法是本地回滾到正確的版本,然後在push一次,如果要消除之前的那次提交記錄,似乎要用git rebase
請見:向Github提交一次錯誤的commit後該怎麼辦
沒有,只能
git reset --hard
然后git push -f
。你的問題詢問的是如何撤銷remote 的commit,唯一的辦法就是本地修正然後又強制推送,並且很多人都已經提到,強制推送是非常壞的實踐,除非必要或者個人未公開項目或者小團隊專案(溝通成本較低)才可行。
看了你給別的回答的評論,似乎你想清理提交歷史,那麼 git 相比於其它 VCS 在這方面絕對是非常在行的。你可以使用
git rebase
命令对历史进行重构,可以重新排序、合并、拆分一些提交,总之完全足够清理你所谓的脏历史。如果你想要对整个历史做某些确定的修改,还有git fileter-branch
指令可用,非常靈活,相當值得深入。說說我的提交流程吧,我一般是對一個文件進行修改直到達到我的目的後才開始進行提交,這個時候我也不是只直接做一次提交,而是使用vim 和vim-fugitive 插件,在diff 模式下開啟工作區和暫存區,然後在暫存區重新一步一步的重現我的修改,在適當的時候進行提交。由於我已經完成了整個修改,所以我很清楚每個修訂該誰先誰後,所以能夠做到比較乾淨清晰和“原子性”(即一個提交只做一個特定的修改,而不是混合若干個修改)的提交,方便其他人進行程式碼審閱。
——————
最後,希望注意,SF 不同於國內的論壇模式,不是一問一答再問再答的方式。如果你覺得需要補充你的問題,直接修改問題即可,這樣所有關注的人都會得到通知。如果你只在別的回答的評論裡面進行問題的更新和補充,沒有人會得到通知的。
請認真對待上傳到網上的東西. 那都是歷史, 要尊重歷史, 你可以在本地隨便調戲你的記錄. 一旦你將他發布, 他就會成為互聯網上的歷史, 必須要尊重的歷史.
折騰了半天我就是想說, 上傳之後就不應該更改了. 你這個想法是有問題的.
我的做法是本地回滾到正確的版本,然後在push一次,如果要消除之前的那次提交記錄,似乎要用git rebase
請見:向Github提交一次錯誤的commit後該怎麼辦