2010-11-24 639 views
32

我不得不承認,我沒有玩過高級功能,但是在我目前的項目中我不得不這樣做。讓git master HEAD指向當前分支的頭部

的情況: 有人想實現一些功能,並將它們comitted到主,現在我被稱爲做這個其他人試圖做(但失敗了),因此,我做的第一件事就是

git checkout -b clean_start HASH 

散列是一個正確的SHA1哈希大約20個提交之前,當前主和工作。我現在對這個分支做了一些修改,現在我想將遠程倉庫的當前主分支(有其他人所做的更改)更改爲我的本地分支。

換句話說,我想將主人20的頭部提交回來,然後將我的新干淨分支合併到其中。

這正是我所要做的嗎?恢復HEAD〜20等,或者是否有一個命令,使得這種頭部移動?

回答

28

你可以做到這一點,如果遠程倉庫接受強制推送:

git push --force origin clean_start:master 

需要注意的是,如果任何人有克隆的資源庫,一個從他們推有可能撤銷該。如果要合併本地主分支和遠程主分支,但是從你的分支保留文件樹(丟棄起源的主的文件樹),你可以這樣做是這樣的:

git merge -s ours --no-commit origin/master 
git commit # Separate step so that you can use your own commit message. 
git checkout master 
git merge clean_start # Fast-forward 
git push origin master 

這將創建將兩個分支(您的主人和原始主人)作爲其父項的合併提交,但該樹將與您當前的分支提示相同。換句話說,它將在沒有實際代碼合併發生的情況下創建符號合併。

如果您不介意在回購協議中工作的其他人會中斷,您可以使用第一種方法。但是,如果你與已經有這些提交的其他人一起工作,第二種方法將更加傻瓜式並且會保留歷史記錄。

+0

你編輯信息,包括「clean_start:大師」? – 2010-11-25 01:37:48

+0

是的,我忘了他是從第二個分支開發,而不是主人。我更新了我的其他命令列表以彌補這種疏漏。 – cdhowie 2010-11-25 01:39:01

24
  1. 您可以具體點師傅,你希望它是用:

    git update-ref refs/heads/master clean_start 
    

    (如果你正在跟蹤clean_start的新變化,要掌握點那裏)

    當心無論大師指着什麼(大約20次提交)都會「丟失」。

    您需要強制主的,因爲這推:

    git push origin master -f 
    
  2. 如果你要離開本地主它在哪裏,而不是推clean_start的地方遠程主,只是這樣做:

    混帳推起源clean_start:主-f

    希望這會有所幫助。

    PS。首先運行gitk --all &,以便您可以在視覺上看到發生了什麼。

16

git reset命令存在以更改HEAD指向的內容。

在你的情況,你可以這樣做:

git checkout master    # switch to the master branch 
git reset --hard clean_start  # point HEAD to the clean_start branch 
git push -f origin master:master # force push the new HEAD to server