在 Git 中推送更改:“您的分支和‘origin/master’已经分歧”

问题描述 投票:0回答:1

按照本教程,我创建了自己的 jekyll 网站,由 github 托管。不过,我使用了不同的模板,即“这个”。我分叉了这个模板,安装了 git,并将存储库克隆到我的计算机上名为“Website”的文件夹中。我在“网站”文件夹中个性化了模板,并能够使用 bundle exec jekyll serve 进行预览。

然后我想启动并运行我的网站。命令 
git status

显示了我预期的变化。然后我写了

git add <some file shown in git status>

git commit
,然后
git push
。在某个时候我收到错误消息:
你的分支和“起源/主人”已经分歧,
并且分别有 1 和 1 个不同的提交。

我尝试了各种各样的事情。我写了

git reset --hard origin/master
。这将重置所有本地更改。幸运的是,为了防止出现任何问题,我事先复制了“网站”文件夹。我删除了重置文件夹并保留了原始文件夹的副本,并将其重命名为“网站”。

现在,当我 cd 到此文件夹并写入 
git status

时,我再次收到错误:

你的分支和“起源/主人”已经分歧,
并分别有 1 和 1 个不同的提交。
(使用“git pull”将远程分支合并到您的分支中)

无需提交任何内容,工作树干净

如何启动并运行我的网站?

git pull

命令给出“致命:需要指定如何协调不同的分支。”

	

“分歧”意味着您的本地主机和远程主机有不同的提交。自从您克隆以来,有人已将提交推送到 master。让我们一起来看看吧。
git github push commit pull
1个回答
0
投票
您的遥控器如下所示:

remote A - B - C [master]

A、B 和 C 是现有提交。 master 指向提交 C。您创建一个克隆。
remote
A - B - C [master]

local
A - B - C [master][origin/master]

origin/master 是一个远程跟踪分支,它会记住您上次查看时 master 在遥控器上的位置(默认名称为“origin”)。未经您同意,Git 不会使用网络(拉、推、获取)。
在某个时刻,有人将提交推送给了 master。我们将该提交称为 D。

remote A - B - C - D [master] local A - B - C [master][origin/master]

您的本地存储库看不到该更改。在本地,您做出承诺。我们将其称为提交 4。
remote
A - B - C - D [master]

local
A - B - C - 4 [master][origin/master]

在某个时刻,Git 会获取远程(源)状态的更新。它更新了 origin/master。
remote
A - B - C - D [master]

local
A - B - C - D [origin/master]
         \
          4 [master]

当你尝试
git push
时,Git 不会让你这样做,因为你的分支已经

分歧

。您的提交不在 origin/master 之上。 
git push不会为您合并它们。你必须将 origin/master 合并到你的 master 中,然后推送。
$ git switch master
$ git merge origin/master

remote
A - B - C - D [master]

local
A - B - C - D [origin/master]
         \   \
          4 - M [master]

现在你可以推动了。

通常,

git pull
会为您合并。默认情况下,

git pull

git fetch
(更新origin/master)加上
git merge origin/master
。但您的 Git 尚未完全配置。您应该已经获得了一系列有关如何解决此问题的提示。
我推荐

git config pull.rebase merges

。这将改变

git pull
,因此它会执行 git fetch
,然后执行 
git rebase origin/master
。这将在远程提交之上重写您的提交。这可以避免大量不必要的合并,从而使您的历史记录变得复杂。
$ git config pull.rebase merges
$ git pull

remote
A - B - C - D [master]

local
A - B - C - D [origin/master]
             \
              4A [master]

这使得历史记录更加清晰、线性,没有“更新合并”。
    

© www.soinside.com 2019 - 2024. All rights reserved.