5

この記事に従って、作業コピーを更新するときに明示的にフェッチしてマージする習慣を身につけようとしました。しかし、今日、コマンドを発行するときにタイプミスをしました。

$ git fetch origin
$ git merge origin asdf

マージ コマンドでスラッシュの代わりにスペースを使用したことに注意してください。とにかく望ましい効果があったように見えたので、ログに奇妙な言葉遣いのコミットが追加されたことに、プッシュするまで気づきませんでした。

commit 65f0037bed926c338cb95e7437e7f7f407028d9f
Author: Me <my_email@example.com>
Date:   Mon May 14 09:36:44 2012 -0700

    Merge branch 'asdf', remote-tracking branch 'origin' into asdf

これが実際に負の副作用を持っていたのかどうか疑問に思っています. 現在のブランチにマージするために引数を 2 つの別々のブランチ仕様として扱ったようで、「origin」は暗黙のうちに「origin/asdf」に展開されます。これは私が実際に意図したことです。その時点で、なぜ「ブランチ 'asdf' を asdf にマージする」ことさえ許可するのかわかりません。

これは単なる恥ずかしいノーオペレーションでしたか?それとも、潜在的に問題のある構成をリポジトリ履歴に導入しましたか?

編集:の出力git cat-file commit 65f0037b

tree 74ed9ead4b82e4e56bd5656ee10375f8f0fcb60d
parent 3bc2a37031a4a391aa4da64c22e3f55148cd23e2
author Me <my_email@example.com> 1337013404 -0700
committer Me <my_email@example.com> 1337013404 -0700

    Merge branch 'asdf', remote-tracking branch 'origin' into asdf
4

1 に答える 1

4

mergeコマンドのマニュアルページから始めましょう。

   git merge [-n] [--stat] [--no-commit] [--squash]
           [-s <strategy>] [-X <strategy-option>]
           [--[no-]rerere-autoupdate] [-m <msg>] [<commit>...]

したがって、すべてのオプションがない場合mergeは、コミットのリストを受け入れます。すでにブランチasdfにいる場合は、次のように入力します。

git merge asdf

...これはノーオペレーションです。ブランチをそれ自体とマージすることは、何もする必要がないことを意味します。これを入力すると:

git merge origin

次にgit、 という名前のリモートに関連付けられたデフォルトのブランチを探しますorigin。の出力branch -a:

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

remotes/origin/HEADデフォルトのブランチを指すため、次のようになります。

git merge origin

次と同等です。

git merge origin/master

したがって、リモートのデフォルトのブランチが であると仮定すると、次のmasterように入力しました。

git merge origin asdf

あなたが得た:

git merge origin/master

デフォルトのブランチが の場合、次のasdfようになります。

git merge origin/asdf
于 2012-05-14T18:52:14.753 に答える