例如,您已經推送了一些提交併將其投入生產,例如在服務器的webroot中。然後出了點問題。很顯然,你想要做的就是暫時將webroot中的文件恢復到以前的狀態,然後返回到本地開發位置,修復損壞的內容,對其進行測試,提交失敗並提交的提交新的修改向主分支提交。然後再次轉到生產webroot並將所有內容都提交到最新的提交中,這樣所有內容都可以修復並正常工作。然後,每個人都可以拉出主分支,而不用擔心提交失敗或重新設置git head或其他令人沮喪的事情。Git:暫時還原推送提交
所以:是它做的
在生產webroot的合法和安全的方法,在主分支
>git log --pretty=format:"%h %ad | %s [%an]" --date=short
0fu83bd Wed Mar 6 17:47:42 2013 | Merge branch 'sample' [developer1]
fd442f8 Wed Mar 6 17:47:10 2013 | Some updates [developer1]
ad84471 Wed Mar 6 17:25:12 2013 | Added something [developer2]
找到您要暫時恢復的文件狀態提交說ad84471
>git checkout ad84471
>git branch
* (no branch)
master
去你開發,修復,提交,[合併],推主分支的任何地方。當你這樣做時,生產文件處於ad84471狀態,沒有人修改它們。然後回到生產Webroot公司:
>git checkout master
>git pull
>git branch
* master
>git log --pretty=format:"%h %ad | %s [%an]" --date=short
7guffbd Wed Mar 6 17:47:42 2013 | Fixed 0fu83bd bugs [developer1] <---new commit
0fu83bd Wed Mar 6 17:47:42 2013 | Merge branch 'sample' [developer1]
fd442f8 Wed Mar 6 17:47:10 2013 | Some updates [developer1]
ad84471 Wed Mar 6 17:25:12 2013 | Added something [developer2]
現在我們是在主分支,一切正常應該。每個人都只需要抓住最新的變化,並且很好。
我檢查與md5deep的文件,以確保一切恢復狀態(拉修復之前),我們已經從恢復:
>md5deep -rel webroot > hashes_master_before_checkouting_ad84471
>git checkout ad84471
>git checkout master
>md5deep -rel webroot > hashes_master_after_checkouting_master_again
這些哈希值之間的差異只顯示
webroot/.git/logs/HEAD
webroot/.git/index
已經改變。
所以它似乎是一個很好的方法來快速修復某些東西,或者我錯了?
聲明:我知道,在很多項目中,這違背了預期的工作流程,而且這種做法不太好,而且以前應該進行自動化測試,但對於開發人員很少的小型項目不可能或不實用,所以與使用git reset或revert相比,此方法可以節省大量時間並簡化這些操作。
謝謝!我可以得出結論:我描述的方法和你的方法都不會導致未來的問題? – Snifff 2013-03-07 11:37:57
他們不應該,我甚至會說他們不可以。不需要執行'md5'檢查(除了保證自己的安全),因爲Git保證文件在您檢查某些內容時將被恢復到正確的內容,並且如果文件包含未提交的更改,它將大聲喊叫。檢出以前的提交,檢出分支頭,提取等都是非常明確的操作,不能讓文件處於不良狀態,他們會準確地給出存儲庫中的內容 – 2013-03-07 12:26:39