最近工作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
更新到最新了?不知道是不是我操作流程的问题,请大牛们指教,谢谢!
質問は次のようになります:
まず、フィーチャー ブランチはリモート ブランチです。リベースすると、ローカル フィーチャー ブランチは dev ブランチに配置されますが、フィーチャーのリモート追跡ブランチ (origin/feature) は元の場所に残ります。このようにプッシュすると、git はプッシュ時にブランチの履歴コミットをチェックし、現在のブランチの最後のコミットがリモート ブランチの最新のコミットではない場合、git は送信を阻止します。 。新しいブランチをフォローするにはプルする必要があります。
また、トラッキング ブランチをローカル ブランチから分離することは得策ではない可能性があります。追跡ブランチを削除し、ローカル ブランチの構造をリモート エンドに同期することが目的の場合。最初にリモート機能を削除すると、ローカル追跡ブランチが削除されます。あとは押すだけです。
git push origin :feature
申し訳ありません、再テストしたところ、思っていたものと全く違うことが分かりました。
確かに拒否が発生し、プルして再度プッシュすることしかできず、競合が発生する可能性があります。
[私自身の実験によると、リベース後にオリジン/フィーチャーがフォークしました。これは git gui を使用して表示できます。その理由は、リベースによってコミット間の親子関係が変更されるためです。
ローカルブランチのみをリベースすることをお勧めします-
http://stackoverflow.com/questions/8939977/git-push-rejected-after-fea...