【问题标题】:git can merge and fetch but not push and pullgit 可以合并和获取但不能推送和拉取
【发布时间】:2016-11-13 21:02:34
【问题描述】:

我知道到处都有人问过这类问题,但我找到的答案都没有帮助。典型问题:

[me@my_server]$ git merge origin development
Already up-to-date. Yeeah!
[me@my_server]$ git push origin development
To ssh://git@git.work.com:8022/my_project
 ! [rejected]        development -> development (non-fast-forward)
error: failed to push some refs to 'ssh://git@git.work.com:8022/my_url'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'Note about
fast-forwards' section of 'git push --help' for details.

推送错误对我说的是某些东西不同步。如果我的推送被接受,在提交链的某个地方,一些提交的历史将会丢失。接受我的推送将强制发生非线性更改,而不是以线性方式将每个更改提交到远程开发分支。

解决方案是将开发中发生的任何事情合并到我的本地分支,对吗? ...但是我的分支已经完全与开发同步。因此,如果除了我试图推送的一个更改(我刚刚创建了一个新文件)之外,2 个分支匹配,那么它为什么会拒绝?这个离线的非快进提交在哪里?是否有一些日志我可以检查以找到有问题的孩子并销毁它?

谢谢

【问题讨论】:

    标签: git merge push branch commit


    【解决方案1】:

    您试图在不检查原始/开发状态的情况下推动开发,您可能不同步(因此被拒绝)。您可能想要git pull origin development(它将获取原始/开发上的更改并将您的内容合并到其中)然后git push origin development(它将推送您的新更改,合并在来自原始的最新内容之上,直到服务器,以便它的快速转发合并能够在那里)。如果您想这样做而不是合并,也可以使用git pull --rebase

    【讨论】:

    • 我之前已经尝试过,它表明我是最新的 [me@server]$ git pull origin development From ssh://git.company/location * branch development -> FETCH_HEAD已经是最新的了。
    • “git pull --rebase”命令运行良好,但仍然出现完全相同的推送错误
    • 你能做一个 git branch -avv 并发布结果吗?它应该表明你是那里的一个过去的起源。
    • 您也可以执行 -f 强制推送,但您可能不想这样做并找出问题所在,因为这可能会导致服务器上的孤儿提交并导致数据丢失在那里。
    • 您可以尝试以下操作,从stackoverflow.com/questions/6897600/… 复制,原因是我的本地分支不知何故丢失了对远程对应的跟踪。在 git branch branch_name --set-upstream-to=origin/branch_name git pull 并解决合并冲突之后,我就可以推送了。
    猜你喜欢
    • 2021-06-28
    • 2011-04-16
    • 2017-12-21
    • 1970-01-01
    • 2017-11-23
    • 2014-04-23
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    相关资源
    最近更新 更多