每次我在 GitHub 上创建存储库并推送文件时,它都会创建两个分支:主分支和主分支。 所有更改都转到主分支,当我转到“比较和拉取请求”时,它说没有什么可以比较,因此无法推送到主分支。
这些是我采取的步骤: 转到 GitHub,创建存储库。 转到我的文件夹并运行
git init
、git add .
、git commit -m "first commit"
、git remote add origin my@repository
和 git push -u origin master
现在我知道我需要创建一个主分支,所以我也运行 git checkout -b main
,它运行成功,但是,当我运行 git push --set-upstream origin main
时,它抛出一个错误:
! [rejected] main -> main (non-fast-forward)
error: failed to push some refs to '[email protected]:myuser/myrepo.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
我也运行
git pull
,但它说它已经是最新的。
同样在主分支上,我运行 git merge master
,但它给出了消息:Already up to date
,反之亦然,从主分支尝试合并主分支(只是为了检查)并给出相同的消息。
我还尝试运行 git push -u origin main
,这给出了以下错误:
error: src refspec main does not match any
error: failed to push some refs to '[email protected]:myuser/myrepo.git'
请注意,我也以不同的顺序尝试了所有这些命令,结果出现了相同的错误。
我可以做什么来解决这个问题?
整个问题基于一个误解,您的第一句话总结了这一点:
每次我在 github 上创建存储库并推送文件时,它都会创建两个分支,主分支和主分支
不。那不是“它”所做的事情。这就是你正在做的事情。如果您不希望这种情况发生,那么不要这样做。为了避免这样做,您需要在行动之前先思考。你需要决定你想要的事情是怎样的,然后你才采取行动来实现它。
让我们谈谈您需要做出的决定,以及如何实现它们。
首先,当您在 GitHub 上创建存储库时,您需要决定它是否完全为空,或者是否应该包含任何初始元素,例如自述文件。
我喜欢我的仓库完全是空的。在这种情况下,它“根本没有分支”。因此,一切都取决于本地端的您。 GitHub 提供了关于此时该做什么的非常清晰的说明。假设您已经创建了一个现有的本地存储库:
git init
git add .
git commit -m "first commit"
现在您的
默认分支是master
。所以你现在必须
决定是否保留它或将其更改为
main
。不管怎样,在你做出决定之前不要强求! 如果您决定保持为
master
,那么只需添加遥控器并按下即可,就像您所做的那样:
git remote add origin my@repository
git push -u origin master
现在停止
。你说:
我需要创建一个主分支不,你不!您已将
master
作为您的主要分支,因此请继续使用它作为主要分支。
另一方面,如果您决定想要main
作为您的主要分支
,请按照 GitHub 为您提供的说明进行操作:
git remote add origin my@repository
git branch -M main
git push -u origin main
再一次,停止
。 无论哪种方式,您都只推送了
一个初始分支,要么master
或
main
。但是,不要做你正在做的事情,即推动
master
,然后神秘地改变主意并决定你希望它是main
。这就是你让自己陷入不必要的纠结的原因。为了完整起见,假设您最初决定在创建 GitHub 存储库时希望它具有初始内容
git init
开始,那么这是一个错误的决定,GitHub 明确地告诉您这一点。但无论如何,让我们继续这个替代方案。
假设您选择使用自述文件启动 GitHub 存储库。好的,所以现在 GitHub 存储库
有一个初始分支,并且它是main
。因此,现在对于在本地计算机上执行的操作,您再次有两种选择:您必须决定
是否使用同一个 GitHub 存储库的空副本在本地启动,或者是否使用您可能已经拥有的存储库在本地启动。如果您决定在本地开始清空,那么请
不说git init
。说出 git clone
并将远程 GitHub 存储库克隆到本地计算机。在这种情况下这无疑是最好的选择。 但假设你不这样做。假设您决定 从头开始创建一个单独的本地存储库。 例如,您这样做:
$ git init what; cd $_
$ echo howdy > testing.txt; git add .; git commit -minitial
$ git remote add origin my@repository
您的本地存储库有
master
main
。你打算如何推动这个?好吧,我假设您接受 GitHub 现在强加给您的观念,即您应该使用
main
$ git branch -M main
$ git pull origin main --allow-unrelated
$ git push -u origin main
现在您已经将远程存储库和本地存储库折叠在一起,并且具有相同的分支和相同的内容。应用这些命令:
git rebase master
git add theFiles
git commit -m "your commit"
git push -f