2016-10-23 108 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存储库。