[解決済み] git pull origin mybranch' はローカルの mybranch を origin よりも N コミット先にします。なぜ?
疑問点
私はちょうど
git pull
について奇妙なことを観察しました。
金曜日、私はローカルブランチで仕事をしました。
mybranch
. オフィスを出る前に、私はそれを origin (これは私の github リポジトリです) にプッシュしました。
git push origin mybranch
.
昨日、自宅で
pull
ブランチをラップトップに編集し、さらにコーディングし、そして私の変更を github (origin) にプッシュしました。
今、私は再び職場にいて、昨日からの変更を職場のマシンに引き込もうとしました (私は週末に職場のローカル リポで何も変更していません)。
git pull origin mybranch
を実行すると、早送りのマージが発生しましたが、これは問題ありません。その後、私は
git status
を実行すると、それは
# On branch mybranch
# Your branch is ahead of 'origin/mybranch' by 6 commits.
#
nothing to commit (working directory clean)
あれ?週末に触ってもいないし、originからpullしたばかりなのに、どうして6コミットも進んでいるのでしょうか?そこで、私は
git diff origin/mybranch
を実行したところ、差分はまさに私がリモートからプルした6つの変更でした。
を実行することによってのみ、quot;fix" することができました。
git fetch origin
:
From [email protected]:me/project
af8be00..88b0738 mybranch -> origin/mybranch
どうやら、私のローカルリポには参照オブジェクトが欠けていたようです。つまり、pull はすでにフェッチを行いますし、私はそのブランチ以外では何も作業していませんから、そのブランチに
git fetch origin
と
git fetch origin mybranch
は同じ結果になるのでしょうか?
常に
git pull origin
の代わりに
git pull origin branchname
?
混乱しています。
どのように解決するのですか?
git pull
コール
git fetch
を適切なパラメータで呼び出すと、 明示的に取り出したヘッド (あるいはマージ用に設定したリモートブランチがない場合は) を現在のブランチにマージします。
構文は
git fetch <repository> <ref>
ここで
<ref>
はコロン無しのブランチ名です。これは「一発」フェッチで、指定したリモートのすべての追跡ブランチの標準フェッチを行わず、代わりに指定したブランチだけを
FETCH_HEAD
.
更新しました。
1.8.4 以降の Git バージョンでは、取得を依頼した参照を追跡しているリモート追跡ブランチがある場合、その追跡ブランチは現在では
fetch
. この変更は、特に以前の動作が引き起こした混乱を避けるために行われました。
を実行するとき
git pull <repository> <ref>
,
FETCH_HEAD
は上記のように更新され、チェックアウトされた
HEAD
にマージされますが、リモートリポジトリの標準の追跡ブランチはどれも更新されません (Git <1.8.4) 。これは、ローカルでは
が見える
に見えますが、実際にはリモートブランチより進んでいるのです。
個人的には、私はいつも
git fetch
の後に
git merge <remote>/<branch>
を使うことで、マージする前に強制アップデートの警告が表示され、マージする内容をプレビューすることができるからです。もし私が
git pull
をもう少し多く使うのであれば、私はプレーンな
git pull
を、ほとんどの場合パラメータなしで実行します。
branch.<branch>.remote
と
branch.<branch>.merge
を「正しいことをする」。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] リモート Git リポジトリの URI (URL) を変更するには?
-
[解決済み] まだプッシュされていない Git マージを元に戻す
-
[解決済み] Git のリモートブランチを作成する方法を教えてください。
-
[解決済み] Git のローカルコミットを破棄する
-
[解決済み] detached HEADとmaster/originの連携はどうすればいいですか?
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
fatal: リモート参照マスタが見つかりませんでした。
-
git push は最新の解決策を提供します。
-
[解決済み] git fetch と git fetch origin master はブランチの追跡で異なる効果を発揮する
-
fatal: パス仕様 'readme.txt' がどのファイルにもマッチしなかった Solution
-
[解決済み] 単一ファイルのマージをやり直す
-
[解決済み] バージョン管理には、なぜタグとリリース/ベータブランチを使い分ける必要があるのでしょうか?
-
[解決済み] GitHubのウェブサイト上でディレクトリやフォルダの名前を変更するには?
-
[解決済み] gitで、stashを適用せずに、追跡されていないstashedファイルを表示する方法はありますか?
-
[解決済み] どのブランチとマージしたいかを言わずにpullするように言われました。
-
[解決済み] リモートトラッキングブランチからの 'git fetch' と 'git merge' の方法('git pull' のように)。