无法在Git中进行推送或拉取操作

9
我对Git的使用还比较新,但我基本了解其基础知识。然而,我还没有遇到过Push/Pull冲突的情况...直到现在。
此外,我需要指出的是,我用于与Git存储库进行交互的GUI工具是Atlassian SourceTree(我们正在使用Atlassian Stash来管理我们的存储库)。
以下是情景:
我有2个提交要Push,显然有4个更改需要Pull。
当我尝试Pull时,我收到如下信息:
git -c diff.mnemonicprefix=false -c core.quotepath=false fetch origin

git -c diff.mnemonicprefix=false -c core.quotepath=false pull --no-commit origin master
You have not concluded your merge (MERGE_HEAD exists).

Please, commit your changes before you can merge.

Completed with errors, see above.

提示我需要完成合并,但不允许我执行任何操作。我没有获得合并列表,也没有自动合并。我似乎无法完成合并,以便可以继续解决Push/Pull冲突。

当我尝试Push时,会出现以下情况:

git -c diff.mnemonicprefix=false -c core.quotepath=false push -v --tags origin master:master
Pushing to http://XXXXXX@XXXXXXXX.XXXX.XXXX:XXXX/XXXX/XXXX/XXXXX.git
To http://XXXXXX@XXXXXXXX.XXXX.XXXX:XXXX/XXXX/XXXX/XXXXX.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'http://XXXXXX@XXXXXXXX.XXXX.XXXX:XXXX/XXXX/XXXX/XXXXX.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.

现在该怎么解决这个问题呢?我需要 Rebase 或者其他什么方式吗?

我听说过 Fast Forward Push,但是我不知道在这个工具里怎么做。如果必须要做的话,我可以从终端执行 Git 命令。但我不想在没有请教 Git 和这些问题更好理解的人之前就行动。


我刚意识到自己在提问时可能听起来很愚蠢,因为我发布了 Pull 输出结果,上面写着 "You have not concluded your merge (MERGE_HEAD exists). Please, commit your changes before you can merge.",但没有提到它不允许我合并任何东西。这可能导致了我的帖子被投票下降。我已经编辑了我的帖子以提及这个问题。 - CM-Dev
3个回答

9

看起来您正在进行合并操作(也许是之前的一次尝试?)

git merge --abort 可以取消该合并操作,并使您处于一种状态,可以重试拉取并解决冲突。


1
谢谢您的回复。我按照您的建议成功解决了问题。我尝试了几次,但仍然遇到了同样的问题。所以我在再次运行git merge --abort之前关闭了SourceTree,然后再次进行了Pull操作。然后我重新打开了SourceTree,我的合并列表终于出现了。我能够继续合并并解决所有其他问题。 - CM-Dev
1
感谢您的帮助!我非常感激。 - CM-Dev

1
完成合并。运行git status命令可以告诉你哪些文件出现了冲突。对于每一个文件,你需要进行编辑以解决冲突,然后运行git add命令。接着运行git commit命令。之后再进行拉取和推送操作。

1
谢谢您的回复。如果在我尝试合并时没有发生奇怪的事情,您的答案可能是解决问题的可接受方案。然而,我选择了@Darren Clark的答案,因为它更适合我的特定情况。再次感谢! - CM-Dev

0

我曾经遇到过类似的问题,但是在使用终端和vscode源代码控制时。我使用了这个命令 git pull --no-ff 然后再用 git push

或者修改你的gitconfig文件:

  • code ~/.gitconfig # 查看gitconfig文件内容。
  • git config --global pull.rebase false # 合并(默认策略)
  • git config pull.rebase true # 变基
  • git config pull.ff only # 仅快进

然后执行 git push

关于合并和变基的区别 https://www.atlassian.com/git/tutorials/merging-vs-rebasing


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接