首页 > 解决方案 > 无法在 VSCode 中从 Git 推送或拉取,默认情况下 VSCode 推送到错误的分支

问题描述

在 VSCode 中,我“初始化存储库”>“Documents\Visual Studio Code\python\collat​​z_conjecture”> 阶段更改>“init”并提交 > git remote add collatz_conjecture https://github.com/Frappyy/collatz_conjecture.git> 推送。推送告诉我“没有配置推送目的地。”。好的,我 cd 进入 python 脚本和 .git 所在的本地 collat​​z conjecture 文件夹并执行git push collatz_conjecture,这给了我以下错误:

To https://github.com/Frappyy/collatz_conjecture.git
 ! [rejected]        main -> main (non-fast-forward)
error: failed to push some refs to 'https://github.com/Frappyy/collatz_conjecture.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 config --global init.defaultBranch main因为在推送之后,脚本总是在主分支而不是它应该在的主(默认)分支中结束。

跑步git pull collatz_conjecture main说“致命:拒绝合并不相关的历史”。我对 Git 和 Github 的工作原理有一些基本的了解,但这一切都超出了我的知识范围。我之前在 VSCode 上遇到过一些非常烦人的 Git 问题,所以我来了。

标签: gitgithubvisual-studio-code

解决方案


我可以看到您在以下位置提交了一个大部分为空的README.md文件collatz_conjecture/mainhttps ://github.com/Frappyy/collat​​z_conjecture/commit/9bdf666e101a5be28bdb5cd9b43d47a43633e74e

在我看来,就好像您通过初始化一个空的本地存储库并创建不同的初始提交来在本地创建另一个历史记录而不是克隆此存储库。

这也是拉取失败的原因,因为 GitHub 上创建自述文件的提交和执行其他操作的本地提交没有共同的祖先提交。

如果使用自述文件在 GitHub 上提交无论如何都没有用,那么强制推送一次应该可以解决问题:

git push -f

这将删除包含您的README.md文件的历史记录并将其替换为您的本地历史记录。

如果您想在 GitHub 上保留您的自述文件提交,您可以强制 Git 合并“不相关”的历史记录,然后推送:

git pull collatz_conjecture main --allow-unrelated-histories
git push collatz_conjecture

collatz_conjecture另外,考虑将遥控器重命名为origin. 这将简化事情,因为通常origin是指向您的在线仓库的遥控器。


为了防止将来出现这些问题,最简单的方法是首先在 GitHub 上创建存储库,然后克隆它,而不是在本地创建一个空的存储库并设置远程,因为这样可以确保两个存储库都将它们的提交添加到一个共同的祖先(来自 GitHub 的自述文件的初始提交)。

或者,您还可以确保在创建存储库时未选中GitHub 中的“使用自述文件初始化存储库” ,因此它将完全为空且其中没有提交。在这种情况下,在本地初始化一个空的 repo、设置远程、在本地创建初始提交和推送也可以。


推荐阅读