私の最初のアドバイスは、しないことgit pull
です。a のgit fetch
後に a を実行しgit merge
ます。
あなたのゼロ番目の質問に答えるには:実際、あなたは最新です。リモート リポジトリにあるすべてのコミットがあります。したがって、フェッチまたはマージするものは何も残っていません1。
最初の質問に答えるには:
git commit
: 変更を自分のブランチにコミットします。リモート リポジトリで起こっていることとはまったく関係ありません。
git fetch origin
: リモート リポジトリ ( ) のコンテンツを取得しますが、ブランチorigin
の下に保持します。origin/branch
この時点では、独自のコードは影響を受けません。
git merge origin/master
:リモート リポジトリorigin/master
のブランチ(今フェッチしたもの) を現在のブランチとマージします。master
origin
git push origin
: コミットとマージをリモート リポジトリにプッシュ バックします。
2 番目の質問に答えるには:
git fetch origin
origin/branch
:ブランチを更新します。
git diff origin/master
: 現在のブランチとブランチの違いを取得しますorigin/master
。
1これが、あなたのリポジトリのコミットがブランチ上で最初にどのように見えるかを仮定しますmaster
:
A -> B -> C -> D -> E
|
|\- master
|
\- origin/master
これは、リポジトリをクローンした直後です。これで、ローカル ブランチで新しいコミットを作成したとしますmaster
。
A -> B -> C -> D -> E -> F
| |
| \- master
|
\- origin/master
したがって、ここで注意すべき点が 2 つあります。
リモートで他の誰かによるアクティビティがないと仮定すると、origin
取得する新しいものは何もありません。つまりgit fetch origin master
、新しいものは何もないということです。
もう一度実行するとgit merge origin/master
、マージするものは何もありません。origin/master
のプレフィックスですmaster
。つまり、master
既にすべてのコミットが含まれているorigin/master
ため、マージする新しいものは何もありません。
の代わりにfetch
andを使用した場合、ダブル コマンド ( ) のどの部分が予期しない (あなたの意見では) 動作を引き起こすのかを簡単に理解できます。merge
pull
pull
もちろん、 の後git push origin master
、次のようになります。
A -> B -> C -> D -> E -> F
|
|\- master
|
\- origin/master