2016-10-23 162 views
2

我的目標是擺脫github上所有提交中的一個文件,因此我執行了下一步:Git - 分別提交不同的提交。 (使用「git pull」將遠程分支合併到你的手中)

我已經用此命令過濾了我的分支:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch [file_name]' HEAD 

刪除所有提交一個單一的文件,現在運行

git status 

後,問我去拉,

[email protected]:/var/www/html/laravel/app_folder$ git status 
On branch master 
Your branch and 'origin/master' have diverged, 
and have 18 and 18 different commits each, respectively. 
    (use "git pull" to merge the remote branch into yours) 
nothing to commit, working directory clean 

但我不想拉。我害怕,如果我拉我將在我的提交再次有這個文件。

不應該我現在推它,所以這些變化對我的git hub起作用....我不知道該怎麼做。

回答

3

是的,你應該推...很可能。

git filter-branch重寫歷史...除了不重寫它,它創建了一個新的歷史。

解釋一下,如果您的存儲庫看起來像這樣,則在提交E以及來源處使用master分支。

A -- B -- C -- D -- E [master] 
         [origin/master] 

然後,在您運行git filter-branch後,這些提交將被重寫爲新的提交。但起源(在Github上)仍然是一樣的。

A -- B -- C -- D -- E [origin/master] 
\ 
    -- B1 - C1 - D1 - E1 [master] 

他們有「分歧」。這是git status告訴你的。您的master不是origin/master的子女。

通常這表示您已對master進行了本地更改,而其他人已將更改推送到原始的master。所以它會告訴你拉他人的變化。

但這是不正確的。你正在覆蓋歷史。所以你應該git push你的新版本master。除了git不允許你出於安全原因這樣做,所以你必須git push --force

+0

對我來說這是最好的解釋答案,所以我接受它作爲答案 – lewis4u

2

git filter-branch所做的是重寫歷史。一旦你重寫了它,所有從分歧點提交的提交都被認爲是不同的。這就是爲什麼它告訴你,你有18個不同的提交 - 這裏的分歧點是18提交之前。

你不應該合併分支,要麼做一個備份,然後用git push --force覆蓋主或只是推它作爲一個新的分支。

+0

我現在得到這個命令後https://s11.postimg.org/m3gusntxv/Capture。png – lewis4u

+0

有關該錯誤,請參閱https://stackoverflow.com/questions/19720711/git-push-warning-questions。只需使用'git push origin master'即可。不要忘記先備份,以防萬一。 – sashoalm

+0

我做到了......現在一切都很好....謝謝 – lewis4u

2

當然,GitHub和本地計算機上的git有不同的歷史:一個與文件,一個沒有。 您需要:

git push --force 

覆蓋github存儲庫。