Git - 不同的提交各自存在(使用“git pull”将远程分支合并到您的分支中)

5

我的目标是在Github上的所有提交中删除一个文件,因此我采取了以下步骤:

我使用以下命令过滤了我的分支:

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

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

git status 

它要求我拉取(pull),

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 上以使更改生效吗……我不知道该怎么办。

4个回答

5

当然,GitHub上的Git和本地计算机上的Git有不同的历史记录:一个有文件,一个没有。

你需要:

git push --force

覆盖Github存储库。


3

是的,你应该推送... 可能.

git filter-branch 会重写历史记录...但实际上它并不会真正地重写历史记录,而是创建了一个新的历史记录。

举个例子,如果你的仓库看起来像这样,master分支和origin都在提交E上。

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,而其他人已经推送了更改到origin的master。所以它告诉你要拉取其他人的更改。
但这是不正确的。你正在覆盖历史记录。因此,你应该git push你的新版本的master。除非出于安全原因,git不允许你这样做,所以你必须git push --force。

对我来说,这是最好解释的答案,所以我接受它作为答案。 - lewis4u

2

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

你不应该合并分支,要么备份后用 git push --force 覆盖主分支,要么将其作为新分支推送。


有关错误,请参见https://dev59.com/AmIj5IYBdhLWcg3w95gc。只需使用`git push origin master`,一切都应该没问题。别忘了先备份,以防万一。 - sashoalm

1
注意:Git 2.42(2023年第三季度)将更改消息,建议在特定情况下使用force-pushing更新远程存储库上的分支,而不是通过合并/变基来调和。
查看提交 c577d65提交 d92304f提交 b6f3da5(2023年7月12日)由Alex Henrie(alexhenrie
(由Junio C Hamano -- gitster --合并于提交 88d08c3,2023年7月25日) remote:不要暗示在推送之前总是需要集成 Signed-off-by: Alex Henrie 在一个狭窄但常见的情况下,用户是分支的唯一作者,并且不介意覆盖远程对应的分支。 这种工作流在GitHub、GitLab和Gerrit上特别常见,它们在打开分支的拉取请求期间保留了每个版本的永久记录。 在这些平台上,鼓励强制推送,并且类似于发送新的补丁集版本的电子邮件。
当给出关于不同分支的建议时,请告诉用户关于git pull(man)的信息,但不要无条件地指示用户执行此操作。 较少规定性的消息将有助于防止用户认为他们必须创建一个集成的历史,而不仅仅是替换先前的历史。 同样,不要暗示git pull仅用于合并。
use "`git pull`" to merge the remote branch into yours

你将会看到:

use "`git pull`" if you want to integrate the remote branch with yours

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接