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