組織内で次のメッセージでコミットしているのは私だけです。
リモート追跡ブランチ「origin/develop」をdevelopにマージします
それらを引き起こすために私が何をしているのかわかりませんが、やめたいと思います。
このコミットを作成するために発行しているコマンドと、それを生成しないために使用する必要がある適切なコマンドは何ですか?
組織内で次のメッセージでコミットしているのは私だけです。
リモート追跡ブランチ「origin/develop」を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
ブランチが削除された場合、 refは自動的に削除されます。origin
git remote update -p
origin/foo
git merge --ff-only @{u}
Gitにアップストリームブランチ(@{u}
引数)をローカルブランチにマージするように指示しますが、ローカルブランチをアップストリームブランチに「早送り」できる場合(つまり、分岐していない場合)に限ります。
git rebase -p @{u}
作成したがまだアップストリームブランチの上にプッシュしていないコミットを効果的に移動します。これにより、回避しようとしているばかげたマージコミットを作成する必要がなくなります。これにより、開発履歴の直線性が向上し、レビューが容易になります。
この-p
オプションは、Gitにマージを保持するように指示します。これにより、Gitがリベースされるコミットを線形化するのを防ぎます。これは、たとえば、機能ブランチをにマージした場合に重要ですmaster
。がない-p
と、機能ブランチのすべてのコミットは、master
によって行われる線形化の一部として複製されgit rebase
ます。これにより、開発履歴の確認が難しくなりますが、簡単ではありません。
注意: git rebase
期待どおりに動作しない可能性があるため、プッシュする前に結果を確認してください。例えば:
git log --graph --oneline --decorate --date-order --color --boundary @{u}..
git pull --rebase
次の理由から、このアプローチの方が好きです。
-p
(--preserve-merges
)オプションを渡すことができます(たとえば、すでにプッシュされた機能ブランチをにマージする)。git rebase
master
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}
上記のコマンドは、(現在のコミット)から到達可能なすべての非マージコミットから、(「アップストリームブランチ」の省略形、つまり、の場合)からHEAD
到達可能なすべてのコミットを差し引いたものを選択するようにGitに指示します。 )それらをアップストリームブランチの上に配置し、現在のブランチ参照を移動して、コミットの再生結果をポイントします。これにより、非マージコミットが最新のアップストリームコミットに効果的に移動し、によって作成されたマージが排除されます。@{u}
origin/master
HEAD
master
git pull
git rebase @{u}
意図的なマージコミットがある場合は、他のブランチからすべてを再生するため、実行したくありません。このケースへの対処はかなり複雑です。そのため、使用して完全git up
に回避することをお勧めします。によって作成されたマージを元に戻すには、git pull
おそらくを使用してから実行する必要があります。の議論は私にとって確実に機能しなかったので、意図的なマージを元に戻し、ローカルブランチをに更新してから、意図的なマージをやり直す必要があるかもしれません(これは、ヘアリーマージがたくさんあった場合は苦痛です)競合)。reset
pull
git rebase -p @{u}
-p
git rebase
reset
@{u}
git fetch
git rebase origin/master
それはそれをする必要があります。または、引き続きプルを使用する場合
git pull --rebase
構成内でそのブランチをセットアップして自動的にリベースすることも、将来作成する他のトラッキングブランチ用にそのように自動的にセットアップすることもできます。その後、使用するだけに戻ることができます
git pull
これについては、このページの「マージではなくリベースでプルする」セクションで詳しく説明します。
リモート追跡ブランチ「origin/develop」をdevelopにマージします
これは、origin / development(リモート変更)をdevelop(ローカル変更)にマージしたgit pullであり、コードが失われるなどの理由で多くの問題が発生しました。
これで、ワークフローはgit pullのマージに関する問題を防ぎ、物事をシンプルに保ちます。基本的にはリベースのようなものですが、ブランチをマージすることで、最も基本的なGUIで簡単に実行できます。他の変更は常にあなたのものにマージされるので、競合が発生した場合は、変更した行に影響するものだけを修正します!そして、変更のみが最終コミットに表示されます。
ええ、それは少し面倒なように見えます、ブランチを変更する、引っ張る、そしてすべて。ただし、rebase docを見ると、共有ブランチで使用しないように警告されています。したがって、同じXブランチを作成してから、git fetchorigindevelopとgitrebaseorigin / developmentを作成し、そのリベースされたXブランチを共有ブランチdevelopにマージして戻す必要があるため、同じ量の作業が必要になります。
通常、ステップ5でリモート変更があった場合、特にステップ6で競合が発生した場合は、再度テストする必要があり、時間がかかるため、ステップ4に戻ります。ステップ8と9を実行している競合状態があります。しかし、それは実際には他の誰かがあなたの直前にプッシュするコーナーケースです。