2013-07-01 77 views
2

我在一大段需要很長時間編譯的軟件上工作。我經常發現自己在本地開發,然後編譯/運行在一臺結實的遠程機器上。 Git使得這一切非常簡單:我在本地提交,然後將該分支拉到遠程的git repo上。不幸的是,當我編寫代碼時,我犯了一些錯誤,經常發現自己犯了一些錯誤,以修復在編譯期間出現的拼寫錯誤和其他小錯誤。這些微型提交加起來並且混亂了我的日誌。我正在尋找一種方法,我可以做這樣的事情:編譯機器的Git工作流程

#local> git commit -m "My useful commit message and the bulk of my commit" 

#remote> git pull local development_branch 
#remote> *compile my code and get a stupid error* 

#local> *fix error* 
#local> git add *fixed file* 
#local> git commit --amend 

#remote> *force an update to remote that causes it to look like master* 

所以,我在尋找,做這最後一步的命令,這是更新我的遙控器看起來像我的本地分支我後已經修改了提交。目前我這樣做的方式是通過做

git reset --hard HEAD~1 
git pull local development_branch 

這個工程,但似乎真的很醜。有沒有更好的方法來完成我想要做的事情?

+1

雖然它與git的問題沒有關係:如果你的程序需要花費很長時間才能編譯,那麼使用'make'或類似的東西來保存大量時間只能重新編譯已經改變的文件嗎? –

+0

不要認爲這是諷刺或諷刺,因爲我真的很好奇。是否有理由不能將編譯分成可單獨構建的分立單元?應該可以做你正在問的問題,但這似乎是重新審視你的開發過程的一個令人信服的理由。 – austin

+1

您可能已經意識到了這一點,但爲防萬一,您可能會遇到一類特別針對您的問題而創建的軟件:持續集成。如[Jenkins](https://jenkins-ci.org)。 – berkes

回答

5

而不是「時光倒流」,然後再拉,就直接復位到遠程的位置:

git fetch local 
git reset --hard local/development_branch 
+0

這個工作,並且比我目前的解決方案稍微錯綜複雜。不過,似乎可能有更好的方法來做到這一點。如果我沒有得到任何其他好的答覆,我會將此解決方案標記爲正確。謝謝回覆! – TimmyJ

+0

你正在重寫歷史 - 這是如何工作的。 – Amber

0

您可以使用

#remote> git pull -uf local development_branch:development_branch 

它會覆蓋當前分支(即development_branch)通過遙控對方,即使它不是一個快進的更新。

UPDATE:

-u|--update-head-ok將授予你甚至可以更新分支它是HEAD

看來fetch會留下髒指數,所以我用fetch替換成pull

+0

當您在當前在遠程計算機上籤出了development_branch時,第一個解決方案似乎不工作(幾乎總是在我的方案中)。無論如何,我已經接受了琥珀的答案。謝謝回覆! – TimmyJ

+0

@TimmyJ啊,對不起未完全測試,我已經更新了我的答案。 – dyng