7

マスターブランチで最新の状態に保ちながら、featureAブランチで作業しようとしています。

これがシナリオです

git clone ssh://xxx/repo

git checkout -b featureA

$ git add file.txt

$ git commit -m 'adding file' 

$ git push origin featureA

その間、オリジンマスターにプッシュされたいくつかの新しいコミット

git checkout master

git pull origin master

git checkout featureA

git rebase master

git push origin feature A
To ssh://xxx/repo
 ! [rejected]        featureA -> featureA (non-fast-forward)
error: failed to push some refs to 'ssh://xxx/repo'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

サーバーに強制的に受け入れさせずにリベースするにはどうすればよいですか?

4

2 に答える 2

9

リベース後はプッシュできません。履歴が異なるため、コミットには異なる SHA1 が含まれるようになりました。更新された ref がその祖先に古い ref を含まない場合、それは潜在的に有害な操作であり、git はそれを許可しません。

強制したくない場合は、マージするしかありません。

あなたが一人で作業していて、他の人がこのブランチにコミットする必要がない場合、強制はそれほど悪くありません。

于 2012-01-20T23:09:42.697 に答える
5

あなたの質問への簡単な答え: master を featureA に対してリベースすることで逆を行うことができます (ただし、まだプッシュしないでください)、featureA をその時点にリセットします。

これは実際には master から featureA へのコミットをチェリー ピッキングすることです。欠点は、2 つのブランチでコミットが重複してしまうことです。それはあなたの差し迫った問題を解決します (それがあなたの意図であれば) が、長い目で見れば、すでにリモート ブランチにプッシュされたコミットをリベースするべきではありません。あなたのシナリオでの最善の解決策は、実際にはマージすることです。

于 2012-01-20T23:14:08.620 に答える