質問: 公開されているブランチのリベース git-rebaseの使用方法を理解できず、次の例を検討します。~/tmp/repoでリポジトリを開始しましょう:$ git init 次に、ファイルを追加しますfoo$ echo "hello world" > foo これが追加され、コミットされます。$ git add foo $ git commit -m "added foo" 次に、リモートリポジトリを起動しました。 ~/tmp/bare.gitで$ git init --bare repoをbare.gitにリンクするために実行しました$ git remote add origin ../bare.git/ $ git push --set-upstream origin master 次に、ブランチを作成してファイルを追加し、新しいブランチb1のアップストリームを設定します。$ git checkout -b b1 $ echo "bar" > foo2 $ git add foo2 $ git commit -m "add foo2 in b1" $ git push --set-upstream origin b1 今度はmasterに戻り、そこで何かを変更します。$ echo "change foo" > foo $ git commit -a -m "changed foo in master" $ git push この時点でmasterのファイルfooにはchanged fooが含まれていますが、b1ではhello world。最後に、b1をmasterでの進行状況と同期させます。$ git checkout b1 $ git fetch origin $ git rebase origin/master この時点でgit stは次を返します:# on branch b1 # your branch and 'origin/b1' have diverged, # and have 2 and 1 different commit each, respectively. # (use "git pull" to merge the remote branch into yours) # nothing to commit, working directory clean この時点で、ブランチb1のfooの内容もchange fooです。では、この警告はどういう意味ですか?私はgit pushをやるべきだと思っていました、gitはgit pullを行うことを提案しています... この答え によると、これは多かれ少なかれそれであり、彼のコメントで@frerichraabeが明示的にプルする必要はないと言って。何が起きてる?危険は何ですか、どのように進めるべきですか?履歴をどのように一貫させる必要がありますか?上記のケースと次の引用の間の相互作用は何ですか? 公開リポジトリにプッシュしたコミットをリベースしないでください。 pro git book から取得。私はそれが何らかの形で関連していると思います。そうでない場合、私はその理由を知りたいと思います。上記のシナリオと私が説明した手順の関係は何ですか この投稿で 。
回答: パーティーで遅くなりましたが、これが後世の答えです:git rebaseはローカルで使用するためのものです。それは履歴を書き換えます。これは非常に素晴らしい「メインライン」を可能にしますが、マルチユーザー環境では危険です次の場合: リモートリポジトリを使用しているのはあなただけです。 また、1つのワークスペースでのみ使用している場合 次に、可能性がありますこれは、履歴を強制的に再書き込みすることで実現できます。リベースを実行してから: git push -f originリモートブランチ これらの仮定のいずれかが満たされていない場合は、このアクションを後悔するために生きるかもしれません:-) このブログ投稿で詳細を読む