![拒绝]主人 - >主人(先获取)

Sym*_*ony 69 git github git-push

有没有一个很好的方法来解释如何! [rejected] master -> master (fetch first)'在Git中解决" "?

当我使用此命令时, $ git push origin master它显示一条错误消息.

! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@github.com:zapnaa/abcappp.git'
Run Code Online (Sandbox Code Playgroud)

lin*_*dit 94

答案就在那里,git告诉你先取.

可能其他人已经推动掌握,你的承诺落后了.因此,您必须获取,合并变更集,然后您将能够再次推送.

如果你不这样做(或者更糟糕的是,如果你通过使用该--force选项强制它),你可以搞乱提交历史记录.

编辑:我进一步了解最后一点,因为这里的一个人刚刚给出了使用该--force选项的非常糟糕的建议.

由于git是一个DVCS,理想情况下,许多其他开发人员正在使用相同的存储库(或它的一个分支)处理与您相同的项目.如果你用变更集强行覆盖,你的存储库将与其他人不匹配,因为"你重写了历史".你会让其他人不高兴,存储库也会受到影响.可能世界上的一只小猫也会哭.

TL; DR

  1. 如果要解决,请先获取(然后合并).
  2. 如果您想破解,请使用该--force选项.

但是你要求前者.一直都是1),即使你总是自己使用git,因为这是一个很好的做法.

  • 无法获取删除本地文件中的重要更改? (3认同)
  • 提取后不会改变 (2认同)

小智 48

尝试:

git fetch origin master
git merge origin master
Run Code Online (Sandbox Code Playgroud)

写完这段代码后,我收到了其他错误:(非快进)

我写这段代码:

git fetch origin master:tmp
git rebase tmp
git push origin HEAD:master
git branch -D tmp
Run Code Online (Sandbox Code Playgroud)

并解决了我的问题

  • @Aurelio A你的合并命令不正确,它应该是“git merge master”。 (2认同)
  • 为什么我们需要使用 gitbranch -D tmp ? (2认同)

小智 19

你应该使用 git pull,这个命令做一个git fetch和下一个做git merge.

如果使用git push origin master --force命令,将来可能会遇到问题.


Ami*_*ghe 14

正如错误消息中所述,您必须“先获取”。这对我有用。使用命令:

  1. git fetch origin master

然后按照以下步骤进行合并:

  1. git pull origin master
  2. git add .
  3. git commit -m 'your commit message'
  4. git push origin master


J D*_*J D 13

pull始终是正确的方法,但是当您尝试将none-Git文件系统转换为Github存储库时,可能会有一个例外.你必须强制进行第一次提交.

git init
git add README.md
git add .
git commit -m "first commit"
git remote add origin https://github.com/userName/repoName.git
git push --force origin master
Run Code Online (Sandbox Code Playgroud)


小智 10

试试这个git命令

git push origin master --force
Run Code Online (Sandbox Code Playgroud)

或者力量不足 -f

git push origin master -f

  • 这会覆盖 git push 限制。不建议团队合作。来自 git push 文档:_如果其他人在您变基时建立在您的原始历史之上,则远程分支的尖端可能会随着她的提交而前进,并且盲目地使用 --force 会_ **失去她的工作**。 (2认同)

小智 5

请按照下面给出的步骤操作,因为我也遇到了同样的问题:

$ git pull origin master --allow-unrelated-histories 
Run Code Online (Sandbox Code Playgroud)

(看看本地分支是否可以轻松地与远程分支合并)

$ git push -u origin master 
Run Code Online (Sandbox Code Playgroud)

(现在将本地 git 存储库的全部内容推送到您的在线存储库)


maj*_*sad 5

当你的队友已经做出承诺时,就会发生这种情况。所以他的承诺是最重要的。为了避免你做变基(merge,fetch)。

我通过以下方法解决了我的问题。

  1. git pull --rebase origin master
  2. git push -u origin master

你可以看到日志git log