GitHub 问题:Git 推送到 master 分支,而不是 main 且两者无法合并

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

每次我在 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'

请注意,我也以不同的顺序尝试了所有这些命令,结果出现了相同的错误。

我可以做什么来解决这个问题?

git github branching-and-merging
2个回答
28
投票

整个问题基于一个误解,您的第一句话总结了这一点:

每次我在 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

现在您已经将远程存储库和本地存储库折叠在一起,并且具有相同的分支和相同的内容。
    

应用这些命令:

-1
投票
git rebase master git add theFiles git commit -m "your commit" git push -f


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