ChatGPT解决这个技术问题 Extra ChatGPT

git错误:无法将一些参考推送到远程

由于某种原因,我现在不能推动,而我昨天可以做到。也许我搞砸了配置或其他东西。

这就是发生的事情:

当我使用 git push origin master

https://i.stack.imgur.com/hOuSj.png

我的工作目录和远程存储库是什么样的:

https://i.stack.imgur.com/Sz17u.png

看起来您的本地存储库与 git 存储库不同步。你试过做 git pull 吗?
请检查这个类似的问题 - stackoverflow.com/questions/18588974/…
@R11G 谢谢先生!这个链接帮助了我stackoverflow.com/a/18589043/3626672
我在新的回购中遇到了这个错误。这有助于:stackoverflow.com/a/6518774/2067690
嘿,如果你此时在 Google 上找到这个,请检查 GitHub 是否已关闭 -> githubstatus.com

V
VonC

(注意:starting Oct. 2020,任何新存储库都是使用默认分支 main 而不是 master 创建的。您可以rename existing repository default branch from master to main
此 2014 年答案的其余部分已更新为使用“main ")

(以下假设 github.com 本身没有关闭,正如 eri0othe comments 中指出的那样:请参阅 www.githubstatus.com 确定)

如果 GitHub 存储库看到新的提交被推送到它,当你在本地工作时,我建议使用:

git pull --rebase
git push

完整的语法是:

git pull --rebase origin main
git push origin main

With Git 2.6+(2015 年 9 月),完成(一次)之后

git config --global pull.rebase true
git config --global rebase.autoStash true

一个简单的 git pull 就足够了。
(注意:使用 Git 2.27 Q2 2020,一个 merge.autostash 也可用于您的常规拉取,无需变基)

这样,您将在新更新的 origin/main(或 origin/yourBranch: git pull origin yourBranch)之上重放(--rebase 部分)本地提交。

请参阅 Git Pocket Bookchapter 6 Pull with rebase 中的更完整示例。

我会推荐一个:

# add and commit first
#
git push -u origin main

# Or git 2.37 Q2 2022+
git config --global push.autoSetupRemote true
git push

这将在您的本地主分支与其上游分支之间建立跟踪关系。之后,该分支的任何未来推送都可以通过简单的方式完成:

git push

同样,使用 Git 2.37+ and its global option push.autoSetupRemote,即使是第一个简单的 git push 也会做同样的事情(即:在您的本地 main 分支和它的上游分支 origin/main 之间建立跟踪关系)。

请参阅“Why do I need to explicitly push a new branch?”。

由于 OP 已经在 origin/main 之上reset and redone its commit

git reset --mixed origin/main
git add .
git commit -m "This is a new commit for what I originally planned to be amended"
git push origin main

无需pull --rebase

注意:git reset --mixed origin/main 也可以写成 git reset origin/main,因为 --mixed 选项是使用 git reset 时的默认选项。


执行您建议的 git pull --rebase ... 可以吗?因为我已经完成了> git reset --mixed origin/master >混帐添加。 > git commit -m "这是我最初计划修改的新提交" > git push origin master 在这里建议stackoverflow.com/questions/18588974/…顺便说一句,先生,您的回答看起来很有帮助
对我来说,我只需要运行“git commit”。 :(
真的超级棒……下面的命令对我有用…… git reset --mixed origin/master git add 。 git commit -m "这是我最初计划修改的新提交" git push origin master 谢谢@VonC
谢谢它的作品!我一直在寻找这个解决方案的时间!
你的最后一组命令真的帮助了我。谢谢😊
P
Peter Mortensen

尝试:

git push -f origin master

那应该可以解决问题。

根据@Mehdi 的评论,关于 —force pushing 的说明:上面的 Git 命令仅适用于第一次提交。如果之前已经有提交、拉取请求或分支,这将重置所有内容并将其设置为零。如果是这样,请参考@VonC 的详细答案以获得更好的解决方案。


有效但不好,除非您知道自己在做什么,否则请不要使用它。 (如果您正在查看 SO,可能您不知道自己在做什么)
如果您要尝试 -f/--force,则改用 --force-with-lease 总是更安全,如果存在会被推送破坏的下游更改,它将中止。许多日常变基情况都需要 --force-with-lease,但几乎从不需要 --force
我不推荐它。
这个在 Nginx 生产环境中为我工作。
i
ironcladmvtm

如果您刚刚使用 git init 并使用 git add . 或类似的东西添加了文件并添加了远程分支,则可能是您没有在本地提交 (git commit -m 'commit message') 任何内容以推送到远程...我刚遇到这个错误,那是我的问题。


刚碰到这个。提交命令在 git add 期间不起作用。好决定。谢谢
谢啦!而已。我以为我提交了我的更改。现在 git push -u origin master 工作正常。
P
Peter Mortensen

我有同样的问题。我遇到了这个问题,因为我没有进行任何提交,甚至没有进行初始提交,但我仍在尝试推送。

完成 git commit -m "your msg" 后,一切正常。


这没有多大意义。最初的问题是关于本地 git 落后。我进行本地提交绝不可以解决“落后”问题!
哦,我也忘了提交:p
这也有可能不允许您使用空提交进行推送
我刚遇到这个问题,我忘了提交。错误信息应该更清楚
它确实适用于我,因为我收到了确切的错误消息并且这个解决方案解决了我的问题。
c
clemens

重命名您的分支,然后推送,例如:

git branch -m new-name
git push -u new-name

这对我有用。


哇,这确实有效,但为什么呢?我的本地分支名称中有一个连字符:my-branch_wont_push。一旦我将它重命名为 my_branch_wont_push,然后 git push -u origin my_branch_wont_push 就为我工作了。
谢谢。正如@cdabel 提到的,连字符是罪魁祸首。将其更改为下划线,我的推动通过了。
我只是将我的分支重命名为其他东西(其中包含一个连字符),它也可以工作。虽然不知道为什么。
P
Peter Mortensen

它通过几个命令行的组合对我有用:

git reset 
git remote -v
git pull --rebase
git init
git add -A
git commit -m "Add your commit"
git branch -M main
git push origin main --force

当心。如果他们有自述文件,git reset 会删除他们。


这听起来像是危险的建议。答案中应解释所有含义和警告。
一个解释将是有序的。例如,想法/要点是什么?它应该做什么?所有的风险是什么?来自 the Help Center“...总是解释为什么你提出的解决方案是合适的以及它是如何工作的”。请通过 editing (changing) your answer 回复,而不是在评论中(没有“编辑:”、“更新:”或类似的 - 答案应该看起来好像是今天写的)。
p
papanito

git init git remote add origin https://gitlab.com/crew-chief-systems/bot git remote -v(用于检查当前存储库) git add -A(添加所有文件) git commit -m 'Added my project' git pull --rebase origin master git push origin master


在推送您需要从存储库中提取的代码之前
你可以像 git pull --rebase origin master 这样简单地写
这对我有用,有一个参考问题,这已解决。
错误:无法生成 sh:没有这样的文件或目录 致命:无法分叉
谢谢!第6步修复它!
R
Rafael Tavares

我在 GitHub 帮助 (Dealing with non-fast-forward errors) 中找到了这个问题的解决方案:

您可以通过获取远程分支上所做的更改并将其与您在本地所做的更改合并来解决此问题: $ git fetch origin # 获取对在线存储库所做的更新 $ git merge origin branch # 将在线所做的更新与本地工作合并或者,您可以简单地使用 git pull 同时执行这两个命令: $ git pull origin branch # 获取在线更新并将它们与您的本地工作合并


当事情按预期工作时,这是正常的过程。当 git 认为它已经像@rubyandcoffee 询问的那样是最新的时,它没有任何帮助。
A
ASHISH R

我按照以下步骤操作,它对我有用。

 rm -rf .git
 git init
 git add .
 git commit -m"first message"
 git remote add origin "LINK"
 git push -u origin master

这是唯一对我有用的解决方案。
这是初学者的最终解决方案
P
Peter Mortensen

如果您使用的是 git push origin master,请将其更改为 git push origin main,反之亦然。


假设 GitHub'ish?
这对我有用。要将 master 更改为 main,我使用了:$ git branch -m master main
P
Peter Mortensen

我遇到了同样的问题,并通过以下步骤修复了它。

混帐初始化混帐添加。 git commit -m 'Add your commit message' git remote add origin https://User_name@bitbucket.org/User_name/sample.git (上面的网址,https://User_name@bitbucket.org/User_name/sample.git,指您的 Bitbucket 项目 URL) git push -u origin master

暗示

使用以下命令检查您的 GitHub 帐户是否与本地 Git 存储库链接:

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

P
Peter Mortensen

我在 GitHub 中创建了一个空存储库,并将我的代码放在本地。我现在面临同样的问题,因为我遵循以下顺序,

git init
git commit -m 'Initial Commit'
git remote add origin https://github.com/kavinraju/Repo-Name.git
git add .
git push -u origin master

问题是:我尝试在暂存我拥有的文件之前提交。

所以我们需要暂存文件然后提交。

这是正确的顺序。

git init
git add .
git commit -m 'Initial Commit'
git remote add origin https://github.com/kavinraju/Repo-Name.git
git push -u origin master

由于我先执行了错误的顺序,所以我只执行了以下命令:

git add .
git commit -m 'Initial Commit'
git push -u origin master

P
Peter Mortensen

因为也许它没有什么可推动的(真的,没有什么可推动的)。像这样做:

git remote add origin https://github.com/donhuvy/accounting133.git
git remote -v
git add .
git commit -m"upload"
git push --set-upstream origin master

根据您的情况更改远程存储库的 URL。您可以跳过命令 git remote -v,仅用于检查。


P
Peter Mortensen

如果您使用的是 Gerrit,这可能是由于提交中的 Change-id 不适当造成的。尝试删除 Change-Id 看看会发生什么。


P
Peter Mortensen

请记住在推送到 GitHub 存储库之前提交您的更改。这可能会解决您的问题。


P
Peter Mortensen

在推送之前不提交初始更改也会导致问题。


P
Peter Mortensen

利用:

git push origin {your_local_branch}:{your_remote_branch}

如果您的本地分支和远程分支共享相同的名称,那么您可以省略您的本地分支名称。只需使用 git push {your_remote_branch}。否则会抛出这个错误。


P
Peter Mortensen

GitHub 将默认分支名称从 master 更改为 main。因此,如果您最近创建了 repo,请尝试推送主分支。

git push origin main

这是初学者容易犯的常见错误。

GitHub 文章Renaming the default branch from master


P
Peter Mortensen

在推送之前,您必须添加并提交更改或执行 git push -f origin master


P
Peter Mortensen

试试这个 Git 命令,

git push origin master –f
git push origin master --force

错误:无法生成 sh:没有这样的文件或目录 致命:无法分叉
“-f”中的“-”是 em dash,而不是 ASCII 45(“-”)。我不认为它会起作用。
P
Peter Mortensen

使用 Azure DevOps 中的 Git 存储库,问题在于分支策略要求对分支的所有更改都必须通过拉取请求 (PR) 进行。尝试将更改直接推送到分支会生成错误“无法将某些引用推送到...”。

我创建了一个 PR 分支并毫无问题地推送。


P
Peter Mortensen

如果您是第一次在 GitHub 页面上部署站点,只需运行这两个命令。

git commit -m "initial commit"
git push origin +HEAD

P
Peter Mortensen

就我而言,Git pre-push 挂钩存在问题。

运行 git push --verbose 以查看是否有任何错误。

仔细检查目录 .git/hooks 中的 Git 挂钩,或者将它们暂时移动到另一个地方,然后查看之后是否一切正常。


P
Peter Mortensen

由于最近“在 GitHub 中将 master 替换为 main”操作,如果您执行 git show-ref,您可能会注意到有一个 refs/heads/main。因此,以下命令可能会从

git push heroku master

git push heroku main

这将解决您的问题。


T
Trần Thanh Phong

这些步骤对我有用:

切换到当前分支并提取最新代码 重命名本地分支 git branch -m [new-name] 将本地分支推送到服务器 git push origin [new-name] 从服务器中删除分支 git push origin --delete [old-name]


为什么需要重命名本地分支?
P
Peter Mortensen

就我而言,是我的 husky 包不允许推送。

> husky - pre-push hook failed (add --no-verify to bypass)
> husky - to debug, use 'npm run prepush'
error: failed to push some refs to 'https://username@bitbucket.org/username/my-api.git'

要强制推送,只需运行 git push origin master --no-verify

我运行 npm run prepush 以查看调试错误,这就是原因:

npm ERR! code ELOCKVERIFY
npm ERR! Errors were found in your npm-shrinkwrap.json, run  npm install  to fix them.
npm ERR!     Invalid: lock file's loopback-utils@0.8.3 does not satisfy loopback-utils@^0.9.0

npm install 并提交它,问题就解决了。


我有一个类似的问题,除了 pre-push 钩子运行了一个 linter,那失败了,因为我没有安装包。 VSCode 刚刚给了我最后的 git 错误,但是当我直接运行 git 命令时,它告诉我安装问题。运行 yarn install 对其进行了排序。
P
Peter Mortensen

GitHub 将 master 更改为 main 的事实让我遇到了这个问题。所以从现在开始,push to origin的解决方案是:

git push -u origin main

你的意思是 GitHub 上的远程仓库只有一个分支 main,而不是 master?我在 GitHub 上创建了一个全新的 repo,它的主要分支仍然是……master(暂时)
S
Shubham Agrawal

在我的情况下,这两行解决了这个问题。

git add .
git commit -m "Changes"

实际上,我忘记添加和提交我的更改,只是第一次尝试推送它。

git init
git remote add origin https://github.com/anything/repo-name.git
git add .
git commit -m "Changes"
git branch -M main
git push -u origin main

希望这可以帮助!


B
Binod Singh

最好使用 rm -rf .git/hooks 然后尝试 git push


有趣的是,它在一个案例中帮助了我,显然没有提交原点(无需重新设置基准)。
你为什么要扔掉所有的钩子?也许先备份?
仅仅因为它们阻止您提交而删除所有 Git 挂钩?最好找到真正的原因。
P
Peter Mortensen

创建一个新分支为我解决了这个问题:

git checkout -b <nameOfNewBranch>

正如预期的那样,由于前一个分支完全包含在新分支中,因此不需要合并。


我确实遇到了这个问题,我在 feature22 上并且正在做 git push origin feature22-fix,但 feature22-fix 既没有退出本地也没有退出远程,所以我必须先在本地签出分支,然后推送