最近工作git
管理方面遇到一个疑问,如下:
我有两个分支dev
和 feature
分支,目前出现如下疑问,
我在feature
分支先执行 git pull origin feature
操作,更新本地的分支到最新,然后执行了git rebase dev
操作,最后执行git push origin feature
时会遇到如下错误
To ssh://xxx@git.xxxx.com/project_xx/xxx.git
! [rejected] feature -> feature (non-fast-forward)
error: failed to push some refs to 'ssh://xxx@git.xxxx.com/project_xx/xxx.git'
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.
最后再执行一次git pull origin feature
操作才能成功,这样会产生一条merge log,并且内容为空Showing 0 changed files
。
疑问,为什么我之前已经执行了
pull
更新到最新了?不知道是不是我操作流程的问题,请大牛们指教,谢谢!
질문은 다음과 같아야 합니다.
우선, 기능 분기는 원격 분기입니다. 리베이스한 후에는 로컬 기능 분기가 개발 분기에 있지만 기능의 원격 추적 분기인 원본/기능은 여전히 원래 위치에 있습니다. 그런 다음 이렇게 push하면 git은 이를 허용하지 않습니다. push할 때 git은 해당 브랜치의 이전 커밋을 확인합니다. 현재 브랜치의 마지막 커밋이 원격 브랜치의 최신 커밋이 아닌 경우 git은 제출을 방지합니다. . 새로운 지점을 따라가려면 당겨야 합니다.
또한 추적 분기를 로컬 분기와 분리하는 것은 좋은 생각이 아닐 수도 있습니다. 추적 분기를 삭제한 다음 로컬 분기의 구조를 원격 끝과 동기화하는 것이 목적인 경우. 먼저 원격 기능을 삭제하면
git push origin :feature
로컬 추적 분기가 사라질 수 있습니다. 그러면 그냥 밀면 됩니다.죄송합니다. 다시 테스트해본 결과 제가 생각했던 것과 전혀 다르다는 것을 알았습니다.
실제로 거부가 발생하고 다시 당기고 밀기만 가능하며 충돌이 발생할 수 있습니다.
[내 실험에 따르면 리베이스 후 원본/기능이 포크되었으므로 git gui를 사용하여 볼 수 있습니다. 리베이스는 커밋 간의 상위-하위 관계를 변경하기 때문입니다.]
http://stackoverflow.com/questions/8939977/git-push-rejected-after-fea...