为什么我不能在GIT存储库上推送此提交?错误:无法将某些引用推送到my_repo

时间:2017-05-24 14:03:58

标签: git version-control bitbucket git-push

我发现了推送我的GIT(BitBucket)存储库的以下问题。

如果我 git push ,我会收到以下错误消息:

$ git push
fatal: You are not currently on a branch.
To push the history leading to the current (detached HEAD)
state now, use

    git push origin HEAD:<name-of-remote-branch>

所以我尝试做 git push origin master 但是给我以下错误信息:

$ git push origin master
To https://bitbucket.org/AndreaNobiliProjects/glis-trigger.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://AndreaNobiliProjects@bitbucket.org/AndreaNobiliProjects/glis-trigger.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. Check out this branch and integrate the remote changes
hint: (e.g. 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

可能是什么问题?我该如何解决它?

我在获取此错误消息之前解释了我所做的事情:

  • 我试图推,但我不能,因为在存储库中有另一个人做了一些更改。
  • 我从存储库中提取,但我不想使用这些更改,所以我用我的版本替换了项目的内容(我在拉动之前做了备份)。
  • 我再次提交并推送,我收到了此错误。

我该怎么做才能解决这种情况?

3 个答案:

答案 0 :(得分:1)

! [rejected] master -> master (non-fast-forward)

推送被远程存储库中的钩子拒绝,因为它不是快速推送。本地主人和远程主人分道扬。

将本地主服务器重置为备份修订,然后运行git pull --rebase origin master。新的本地提交将被重新定位到远程主人的提示上。在重组之后,推动将是一个快速前进的推动力。

答案 1 :(得分:1)

在你对导致错误导致的行为的解释中,有些东西要么缺失要么不清楚。您处于分离的HEAD状态,这通常意味着您执行了除分支名称之外的checkout。这很好,但这将是一个重要的细节(并且知道你究竟做了什么以及为什么会影响恢复步骤)。

如果您确实没有执行结帐,则会发生其他事情,以意外的方式更改了您的HEAD值。还原项目文件时,备份是否包含(部分或全部).git目录? (通过git命令操作.git目录是有风险的业务。)

嗯,无论如何,第一个错误告诉我们你处于分离状态。第二个错误告诉我们你的分离HEAD已经与master分道扬..换句话说,在您的本地回购中,您有

X --- X --- X --- A <--(origin/master)
             \
              B <--()
                    ^HEAD

或类似的东西。现在,&#34;推动掌握&#34;意味着&#34;让origin/master指向这里&#34;。默认情况下,git会阻止origin/master指向B,因为A无法再从origin/master到达{而不是之前的git rebase。对于存储库的所有其他用户而言,这是一个有效的上游rebase(请参阅&#34;从https://git-scm.com/docs/git-rebaseX --- X --- X --- A --- B' <--(origin/master) 文档中的上游rebase&#34;中恢复。)

这个安全功能可以被覆盖,但我建议不要这样做;这样的决定应该由团队刻意做出,看起来很像你不小心发现自己处于这个位置。

相反,你应该瞄准像

这样的结果
B'

如果A恰好还原了.git/的所有更改,那就是您和同事之间的所有更改。那么如何从这里到达那里?

好吧,假设您已经验证了您的工作树(项目目录不包括git reset --mixed master 目录)看起来像您想要的那样,您可以将其转移到主

git add .

会将您的HEAD和索引状态移动到master,但保持工作树不变。

soft

将更新索引以匹配您的工作树。 (如果您确认索引与工作树匹配,那么可以使用mixed重置,而不是add重置后跟git commit git branch -f master - 它可能应该这样,但我想确保......)

origin/master

现在你应该能够推动,除非export class TranslateHelper { private currentLanguage: string; private defaultLanguage = 'de-de'; private language: Subject<any> = new Subject<any>(); public language$ = language.asObservable(); constructor( private route: ActivatedRoute) {} public getCurrentLanguage() { this.route.params.subscribe(params => { this.language.next(params.lang) }); } } export class FooterComponent implements OnInit { public lang; constructor(private translateHelper: TranslateHelper) { } ngOnInit() { this.translateHelper.language$.subscribe(language => { this.lang = language; }): } } 在过渡期间获得了更多的提交。

答案 2 :(得分:0)

detached HEAD上存在的提交似乎应该作为提交存在于您的本地master分支上。因此,您需要将更改从detached HEAD迁移到本地master分支,然后从远程master分支进行更改以更新本地主分支,最后您可以推送本地master分支。 1}}分支到bitbucket。详情如下:

#If you are still detached HEAD status
git checkout -b temp
git checkout master
git merge temp
git pull origin master -X ours #To keep the conflict files as local version, or you can use git pull origin master --rebase
git push origin master