![拒绝]管理员->管理员(先获取)


101

有没有很好的方法来解释如何解决“! [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'

Answers:


132

答案就在那里,git告诉您先获取。

可能其他人已经推动精通,而您的承诺落伍了。因此,您必须获取,合并变更集,然后才能再次推送。

如果您不这样做(或更糟糕的是,如果使用 --force选项),则可能会弄乱提交历史记录。

编辑:关于最后一点,我会做得更详细,因为这里的一个人刚刚给了使用 --force选项。

由于git是DVCS,因此理想情况下,许多其他开发人员正在使用相同的存储库(或其中的一个分支)来与您从事同一个项目。如果用更改集强行覆盖,则存储库将与其他人的存储库不匹配,因为“您重写了历史记录”。您将使其他人不满意,并且存储库将遭受损失。也许世界上的小猫也会哭。

TL; DR

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

不过,您要求的是前者。坚持1),即使您总是自己使用git,也要始终这样做,因为这是一个好习惯。


5
无法获取删除本地文件中的重要更改?
莱昂纳多·卡斯特罗

2
它在获取后不会更改
dhein

在我写的@dhein中,必须在获取之后进行合并-关键是您必须将本地树与远程树“对齐”(因此合并)–但是,谢谢,我在TL中编写了它;也是灾难恢复
linuxbandit

87

尝试:

git fetch origin master
git merge origin master

编写此代码后,我收到了另一个错误:(非快进)

我写这段代码:

git fetch origin master:tmp
git rebase tmp
git push origin HEAD:master
git branch -D tmp

解决了我的问题


我也是。那解决了我的问题。有几个警告。我搞砸了一个子库,但这个解决它:stackoverflow.com/questions/19584255/...
M.博索莱伊

1
@Aurelio A您的合并命令不正确,应该是git merge master
mike

为什么我们需要使用git branch -D tmp?
МилошВељковић

27

您应该使用 git pull,该命令执行a git fetch,然后执行git merge

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


1
如果您是项目中的唯一人员,并且只为第一次尝试而感到沮丧,应该只使用--force吗?
chrips 17-10-20

20

pull总是正确的方法,但是当您尝试将非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

为我工作,我再次开始了一个新项目(相同的仓库),我想替换它。
ucotta

18

试试这个git命令

git push origin master --force

或力量不足 -f

git push origin master -f


2
这将覆盖git push限制。不建议用于团队合作。从git push文档中:如果您在重新定基时有其他人建立在您的原始历史之上,则远程分支的尖端可能随着其提交而前进,而盲目地用--force推动将 失去她的工作
Casey

10

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

  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



3

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

$ git pull origin master --allow-unrelated-histories 

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

$ git push -u origin master 

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


2

可能是其他人(例如您的同事)已经将提交提交到origin/master不在本地master分支机构中的提交,并且您正在尝试将某些提交从本地分支推送到服务器。在99%的情况下,假设您不想从中删除他们的工作origin,则有两种选择:

2)将其更改合并到您的本地分支中,然后推送合并的结果。 git checkout master git pull # resolve conflicts here git push

(请注意,git pull本质上只是agit fetch和agit merge在这种情况下。)

1)重新设置本地分支机构的基础,以便看起来您的同事先进行了提交,然后又进行了提交。这样可以使提交历史记录保持良好的线性关系,并避免“合并提交”。但是,如果您与同事的更改有冲突,则在最坏的情况下,您可能必须为每次提交(而不是一次)解决这些冲突。从本质上讲,这对其他所有人都更好,但对您来说却需要更多的精力。 git pull --rebase # resolve conflicts here git push

(请注意,git pull --rebase本质上是agit fetch和a git rebase origin/master。)



1

您的错误可能是由于合并分支所致。
只需遵循以下步骤:

步骤1 : git pull origin master如果收到任何消息,请忽略它)
步骤2:git add .
步骤3:git commit -m 'your commit message'
步骤4:git push origin master


1

首先,您应该使用git pull,然后执行命令git fetchgit merge。

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


1

我通过签出像这样的新分支来克服了这个问题:

# git checkout -b newbranch <SHA of master>

# git branch
* newbranch
  master

# git push -u <repo_url_alias> newbranch

您剩下2个分支:Master和newbranch,以后可以进行合并。



0

在我的情况下发生的原因是在创建GitHub rep链接时,我使用README文件对其进行了初始化

创建Git远程时,请勿使用README文件对其进行初始化,否则将显示err

不要那样做,它肯定会很好的,如果您希望在推送到master分支之后,可以使用自述文件对其进行初始化




0

在此处输入图片说明

![拒绝] master-> master(首先获取)错误:无法将某些引用推送到“ git@github.com:”

在此处输入图片说明

使用--force命令成功解决了该问题。因此,您必须使用
git push origin master --force





-1

问题解决了

我遇到的问题

! [rejected]        master -> master (non-fast-forward) error: failed to push some refs to 'https://github.com/repo_name/repo-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.

我也有同样的问题。问题是您commits的其他存储库中的存储未成功,pushed因此您需要运行以下命令:

  1. git fetch origin master

    输出: From https://github.com/username/repo-name * branch master -> FETCH_HEAD

  2. git merge origin master

    输出: Merge made by the 'recursive' strategy. repo-name/ReadMe.md | 1 - 1 file changed, 1 deletion(-)

  3. git push

    输出: Enumerating objects: 8, done. Counting objects: 100% (8/8), done. Delta compression using up to 8 threads Compressing objects: 100% (6/6), done. Writing objects: 100% (6/6), 1.00 KiB | 1.00 MiB/s, done. Total 6 (delta 2), reused 0 (delta 0) remote: Resolving deltas: 100% (2/2), completed with 1 local object. To https://github.com/user_name/repo-name.git 0852d5vf..70v56d9 master -> master

非常感谢

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.