按照本教程,我创建了自己的 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。让我们一起来看看吧。
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]
这使得历史记录更加清晰、线性,没有“更新合并”。