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

mitkmikd  于 2023-08-01  发布在  Git
关注(0)|答案(4)|浏览(131)

我的目标是在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上生效了吗?我不知道该怎么办。

qgzx9mmu

qgzx9mmu1#

当然,github上的git和本地计算机上的git有不同的历史记录:一个有文件一个没有您需要:

git push --force

字符串
覆盖github仓库。

pkmbmrz7

pkmbmrz72#

是的,你应该推。。大概吧。
git filter-branch重写历史...只不过它没有重写而是创造了新的历史
为了解释,如果你的仓库看起来像这样,在commit E和origin上有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进行了本地更改,而其他人则将更改推送到origin的master。所以它告诉你去拉别人的变化。
但这是不正确的。你在改写历史。所以你应该git push你的新版本的master。但出于安全原因,git不允许你这么做,所以你必须使用git push --force

j7dteeu8

j7dteeu83#

git filter-branch所做的是重写历史。一旦你重写了它,所有来自分歧点的提交都被认为是不同的。这就是为什么它告诉你有18个不同的提交-这里的分歧点是18个提交之前。
你不应该合并分支,要么做一个备份然后用git push --force覆盖master,要么就把它作为一个新的分支推送。

yqkkidmi

yqkkidmi4#

注意:Git 2.42(Q3 2023)将更改消息,提示在某些情况下强制推送是一种有效且明智的更新远程仓库分支的方法,而不是与merge/rebase协调一致。
参见commit c577d65commit d92304fcommit b6f3da5(2023年7月12日)by Alex Henrie ( alexhenrie )
(由Junio C Hamano -- gitster --合并于commit 88d08c3,2023年7月25日)

remote:并不意味着在推送之前总是需要集成

签字人:亚历克斯·亨利
在一个狭窄但常见的情况下,用户是分支的唯一作者,并且不介意覆盖远程上的相应分支。
这种工作流在GitHub、GitLab和Gerrit上特别常见,它们会永久记录在为该分支打开拉取请求时推送的分支的每个版本。
在这些平台上,强制推送受到鼓励,类似于通过电子邮件发送补丁集的新版本。
当给出关于发散分支的建议时,告诉用户git pullman),但不要无条件地指示用户这样做。
一个不太规范的消息将有助于防止用户认为他们需要创建一个集成的历史,而不是简单地替换以前的历史。
同样,不要暗示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

相关问题