私は、組織内で次のメッセージをコミットしている唯一の人です。
リモート追跡ブランチ「Origin/develop」を開発にマージします
それらを引き起こすために私が何をしているかわからないが、私はやめたい。
このコミットを作成するためにどのコマンドを発行していますか?また、それを生成しないために使用すべき適切なコマンドは何ですか?
git pull
はおそらくコミットを作成しています。ローカルコミットを行い、誰かがリポジトリにコミットをプッシュした後にgit pull
を実行すると、Gitは他の開発者のコミットをダウンロードし、ローカルブランチにマージします。
git pull --rebase
を使用して、将来これが起こるのを防ぐことができますが、リベースには危険があります。 pull
を完全に避けることをお勧めします 。
代わりに、次の使用パターンに従うことをお勧めします。
# download the latest commits
git remote update -p
# update the local branch
git merge --ff-only @{u}
# if the above fails with a complaint that the local branch has
# diverged:
git rebase -p @{u}
git remote update -p
は、リモートリポジトリ内のすべてのコミットをダウンロードし、リモートトラッキングブランチを更新します(例:Origin/master
)。作業ディレクトリ、インデックス、またはローカルブランチには影響しません。
-p
引数は、削除されたアップストリームブランチをプルーニングします。したがって、foo
ブランチがOrigin
リポジトリから削除された場合、git remote update -p
は自動的にOrigin/foo
refを削除します。
git merge --ff-only @{u}
は、Gitにローカルブランチにアップストリームブランチ(@{u}
引数)をマージするように指示しますが、ローカルブランチをアップストリームブランチに「早送り」できる場合(つまり、そうでない場合) t発散)。
git rebase -p @{u}
は、作成したコミットを効果的に移動しますが、まだ上流ブランチの上にプッシュしていません。これにより、回避しようとしている愚かなマージコミットを作成する必要がなくなります。これにより、開発履歴の線形性が向上し、レビューが容易になります。
-p
オプションは、Gitにマージを保持するよう指示します。これにより、Gitがリベースされるコミットを線形化できなくなります。これは、たとえば、機能ブランチをmaster
にマージした場合に重要です。 -p
がなければ、git rebase
によって行われた線形化の一部として、機能ブランチのすべてのコミットがmaster
に複製されます。これにより、開発履歴を確認するのが難しくなり、簡単になりません。
注意してください:git rebase
は期待どおりに動作しない可能性があるため、プッシュする前に結果を確認してください。例えば:
git log --graph --oneline --decorate --date-order --color --boundary @{u}..
次の理由から、git pull --rebase
よりもこのアプローチの方が好きです。
master
へのマージ)をリベースする必要がある場合に、-p
(--preserve-merges
)オプションをgit rebase
に渡すことができます。git up
の代わりにgit pull
上記を簡単に行うために、up
というエイリアスを作成することをお勧めします。
git config --global alias.up '!git remote update -p; git merge --ff-only @{u}'
ブランチを最新の状態にするために必要なことは、実行することだけです:
git up
git pull
の代わりに。ローカルブランチがアップストリームブランチから分岐したためにエラーが発生した場合、それがリベースの手がかりです。
git pull --rebase
ではありませんか?git pull --rebase
を実行することは、git fetch
に続けてgit rebase
を実行することと同じです。これは、新しいアップストリームコミットに早送りしようとしますが、それが不可能な場合は、ローカルコミットを新しいアップストリームコミットにリベースします。通常はこれで問題ありませんが、注意してください。
git pull --rebase
は、コミットを組み込む前に確認する機会をあなたに与えません。アップストリームの変更内容に応じて、リベースが間違った操作である可能性が非常に高くなります。rebase --onto
、merge
、reset
、またはPush -f
がrebase
よりも適切である可能性があります。--preserve-merges
をリベース操作に渡すことはできないため、機能ブランチの意図的なマージは線形化され、すべての機能ブランチのコミットが再生(つまり複製)されます。git pull
によって作成された既存のマージコミットを「修正」するgit pull
によって作成されたマージコミットをまだプッシュしていない場合は、マージコミットをリベースできます。意図的なマージ(たとえば、既にプッシュされた機能ブランチを現在のブランチにマージする)を行っていない場合、次のようにする必要があります。
git rebase @{u}
上記のコマンドは、GitにHEAD
から到達可能なすべての非マージコミット(現在のコミット)から、@{u}
から到達可能なすべてのコミット(「上流ブランチ」の省略形、つまりOrigin/master
HEAD
がmaster
の場合、それらを上流ブランチ上で再生(チェリーピック)し、現在のブランチ参照を移動してコミットの再生結果を指すようにします。これにより、非マージコミットが最新のアップストリームコミットに効果的に移動され、git pull
によって作成されたマージが排除されます。
意図的なマージコミットがある場合、git rebase @{u}
を実行したくないのは、他のブランチからすべてを再生するためです。このケースの処理はかなり複雑です。そのため、git up
を使用し、git pull
を完全に避けるのが良い理由です。おそらくreset
を使用して、pull
によって作成されたマージを元に戻し、git rebase -p @{u}
を実行する必要があります。 -p
へのgit rebase
引数は確実に機能しなかったので、意図的にマージを元に戻し、ローカルブランチを@{u}
に更新してからやり直すには、reset
を使用する必要があります意図的なマージ(多くの毛深いマージの競合があった場合、これは苦痛です)。
git fetch
git rebase Origin/master
それはそれを行う必要があります。または、プルを使い続けたい場合
git pull --rebase
また、設定でそのブランチを自動的にリベースするようにセットアップしたり、作成する他の将来の追跡ブランチに対して自動的にそのようなセットアップを行うこともできます。その後、使用するだけに戻ることができます
git pull
詳細については、このページの「マージではなくリベースでプル」セクションをご覧ください。