我发现了推送我的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.
可能是什么问题?我该如何解决它?
我在获取此错误消息之前解释了我所做的事情:
我该怎么做才能解决这种情况?
答案 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-rebase的X --- 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