Git - 分别提交不同的提交。 (使用" git pull"将远程分支合并到你的分支中)

时间:2016-10-23 09:27:15

标签: git

我的目标是在github上的所有提交中删除一个文件,以便我接下来的步骤:

我已使用此命令过滤了我的分支:

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

删除所有提交中的单个文件,现在运行

git status 

它要我拉,

ubuntu@ubuntu:/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 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

git filter-branch的作用是重写历史记录。一旦你重写了它,从发散点开始的所有提交都被认为是不同的。这就是为什么它告诉你你有18个不同的提交 - 这里的分歧是18次提交。

您不应该合并分支,进行备份,然后使用git push --force覆盖master或者将其作为新分支推送。

答案 2 :(得分:2)

当然,gitub和本地计算机上的git有不同的历史:一个有文件,一个没有。 你需要:

git push --force

覆盖github存储库。