[解決済み] なぜgit branch --unset-upstream to fixupを呼び出すのですか?
質問
gitの高度な操作に関しては、どちらかというと初心者です。私は自分の ブログ ブログフレームワークを使用した オクトプレス . Octopressは2011年以降、開発されていませんが、私の目的を十分に果たしてくれているので、今のところ何も変えようと思っていません。
参考までに、私のブログはGithub Pagesでホストされています。
今日、新しい記事を作成中に
git status
は、次のようなメッセージを表示しました。
On branch source
Your branch is based on 'origin/master', but the upstream is gone.
(use "git branch --unset-upstream" to fixup)
のような後続のコマンドでも同じメッセージが繰り返されます。
git add .
,
git commit -m 'message'
と
git push origin source
.
- メッセージの意味は?
- 何かが壊れているのでしょうか?
- はい」の場合、何を?
- 修理が必要ですか?
できれば、今後のために読んで理解できるようなpdf/web記事を紹介してください。
詳細はこちら
bash-3.2$ git branch -a
* source
remotes/octopress/2.1
remotes/octopress/HEAD -> octopress/master
remotes/octopress/gh-pages
remotes/octopress/linklog
remotes/octopress/master
remotes/octopress/refactor_with_tests
remotes/octopress/rubygemcli
remotes/octopress/site
remotes/origin/source
さらに情報が必要な場合はお知らせください。ありがとうございます。
解決方法は?
TL;DR版:リモートトラッキングのブランチ
origin/master
は存在していましたが、現在は存在しないため、ローカルブランチの
source
は存在しないものを追跡しています。これは、別のGit機能が何もできないことを意味し、Gitはあなたにそれを警告しているのですから、よく考えてみれば疑わしいことです。 上流追跡機能が意図したとおりに動かなくても、あなたはうまくやっていくことができます。
上流の設定に関する別の見解として、以下を参照してください。 なぜ "git push --set-upstream origin <branch>" としなければならないのでしょうか?
この警告はGitの新しい機能で、Git 1.8.5で初めて登場しました。 リリースノートには、それに関する短い箇条書きがひとつだけ書かれています。
<ブロッククオート- "git branch -v -v" (および "git status") は、以下のものを区別していませんでした。 ブランチ、他のブランチに基づかないブランチは 上流のブランチと同期しているブランチ、上流のブランチと設定されているブランチ 上流のブランチが存在しなくなった。
その意味を説明するには、まず "リモート" と "リモート追跡ブランチ" について、そして Git が "tracking an upstream" をどう扱うかを知る必要があります( リモート・トラッキング・ブランチ という用語はひどく欠陥のある言葉です。 リモート・トラッキングの名前 これは少し改善されたと思います。 しかし、Git のドキュメントとの一貫性を保つために、以下では "remote-tracking branch" を使うことにします)。
各"remote"は単に名前であり、例えば
origin
または
octopress
この場合 これらの目的は、たとえば
git fetch
または
git pull
の更新を行います。 を使用する場合
git fetch remote,
1
Git は (保存された URL を使って) リモートへ行き、適切な更新を行います。 また
記録
を使用して、更新を行います。
リモート追跡ブランチ(またはリモート追跡名)とは、単に、あるquot;リモート(remote)で最後に表示されたブランチ名を記録したものです。 各リモートはそれ自体が Git リポジトリであり、ブランチを持っています。 リモートの "origin"上のブランチは、あなたのローカルリポジトリにある
remotes/origin/
. 表示されたテキストでは、ブランチの名前が
source
で
origin
という名前のブランチと
2.1
,
linklog
などのように
octopress
.
(もちろん、quot;normal" や "local" ブランチは、自分のリポジトリで作成したブランチ名だけです)。
最後に、(ローカル)ブランチを設定して、"リモート追跡ブランチ" を追跡することができます。 ローカルブランチが
L
がリモート追跡ブランチに追跡するように設定されている
R
を呼び出すと、Git は
R
の上流にいることを示し、(コミット数で)上流より進んでいるのか、遅れているのかを教えてくれます。 ローカルブランチとリモート追跡ブランチが同じ名前 (リモートプリフィックスの部分を除く) になるのは、普通のことです (推奨されることでもあります)。
source
そして
origin/source
が、実はその必要はないのです。
そしてこの場合、それは起こっていません。 あなたはローカルブランチ
source
リモート追跡ブランチを追跡する
origin/master
.
の正確な仕組みを知る必要はないはずです。
いかに
Git は、リモートブランチを追跡するためにローカルブランチをセットアップします。 まず、ローカルブランチの名前から始めます。
source
. この名前を使った設定項目が2つあり、スペルは
branch.source.remote
と
branch.source.merge
. 表示された出力から、これらが両方とも設定されていることは明らかなので、与えられたコマンドを実行すると、次のように表示されます。
$ git config --get branch.source.remote
origin
$ git config --get branch.source.merge
refs/heads/master
これをまとめると
2
これはGitに、あなたのブランチが
source
は、あなたの "remote-tracking branch" を追跡しています。
origin/master
.
しかし、次の出力を見てください。
git branch -a
これは、リポジトリ内のローカルおよびリモート追跡ブランチの名前をすべて表示します。 リモートトラッキングのブランチ名は
remotes/
... と
はありません。
remotes/origin/master
. おそらく、かつてはあったのだろうが、今はもうない。
Gitはあなたに、次のことを伝えています。
削除
を使用すると、トラッキング情報を
--unset-upstream
. これは
branch.source.origin
と
branch.source.merge
を表示し、警告を停止します。
しかし、あなたが望んでいるのは、かなりありそうなことです。
スイッチ
トラッキングから
origin/master
を、他のものを追跡するようになりました。
origin/source
のいずれかである可能性があります。
octopress/
という名前になります。
で行うことができます。
git branch --set-upstream-to
,
3
例
$ git branch --set-upstream-to=origin/source
(まだブランチ "source"にいるとして、そして
origin/source
は、あなたが望む上流である。)
(参照 既存のGitブランチをリモートブランチに追従させるには? )
ここに至った経緯は、最初に
git clone
クローン元となったものには
master
. あなたはまた、ブランチ
master
を追跡するように設定されています。
origin/master
(これはgitの通常の標準的な設定です)。 つまり、あなたは
branch.master.remote
と
branch.master.merge
に設定します。
origin
と
refs/heads/master
. しかし、その後、あなたの
origin
リモートの名前が
master
から
source
. それに合わせて、ローカル名も
master
から
source
. これによって
名前
から、設定の
branch.master.remote
から
branch.source.remote
と
branch.master.merge
から
branch.source.merge
... しかし、それは古い
値
ということで
branch.source.merge
が間違っていた。
この時点で "upstream" のリンクが切れました。しかし、Git 1.8.5 より古いバージョンでは、Git はこの壊れた設定に気づきませんでした。 1.8.5では、Gitはそのことを指摘しています。
ほとんどの疑問は解決されましたが、「修正する必要があるのか」という疑問は解決されませんでした。 おそらく、あなたはもう何年も前から、壊れた部分を
git pull remote branch
(例,
git pull origin source
). そのようなことを繰り返していると、問題を回避し続けることになります。
必要
を修正する必要があります。 もしお望みなら
--unset-upstream
を使えば、上流を削除してクレームを止めることができ、ローカルブランチの
source
を持つものとしてマークされています。
任意の
の上流にある。
上流がある意味は、様々な操作を便利にすることです。 例えば
git fetch
に続いて
git merge
は、上流が正しく設定されていれば、一般的に "正しいことをします" となります。
git status
の後に
git fetch
は、そのブランチについて、あなたのレポが上流のレポと一致するかどうかを教えてくれます。
便利さを求めるなら、上流を設定し直してください。
1
git pull
用途
git fetch
そして Git 1.8.4 では、(ついに!) "remote-tracking branch" の情報も更新されるようになったのです。 古いバージョンのGitでは、更新がリモート追跡用ブランチに記録されず
git pull
を使用した場合のみ
git fetch
. Gitのバージョンは1.8.5以上でなければならないので、これは問題ではありません。
2
さて、これに加えて、私が意図的に無視している設定行は、以下の場所にあります。
remote.origin.fetch
. Git は "merge" の名前をマッピングして、リモートブランチの完全なローカル名が次のとおりであることを理解する必要があります。
refs/remotes/origin/master
. しかし、マッピングはほとんど常にこのように動作するため、以下のように予測することができます。
master
は
origin/master
.
3
または
git config
. 上流を設定したいだけなら
origin/source
を変更する必要があるのは
branch.source.merge
と
git config branch.source.merge refs/heads/source
がやってくれるはずです。 しかし
--set-upstream-to
とは
何
ということで、より良い方法だと思います。
関連
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] 新しいローカルブランチをリモートの Git リポジトリにプッシュし、それを追跡するにはどうすればよいのでしょうか?
-
[解決済み] Git のリモートブランチを作成する方法を教えてください。
-
[解決済み] Git で現在のブランチ名を取得するには?
-
[解決済み] Git フェッチ リモートブランチ
-
[解決済み] Git で最新のコミットを新しいブランチに移動する
-
[解決済み】既存のGitブランチをリモートブランチに追従させる?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
-
[解決済み】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: 有効なオブジェクト名ではない: 'master'
-
[解決済み】ERROR: Error cloning remote repo 'origin'.
-
[解決済み】GitHubで空のブランチを作成する
-
[解決済み】gitの「not something we can merge」エラーの解決方法
-
[解決済み】gpgがデータの署名に失敗した fatal: failed to write commit object [Git 2.10.0].
-
[解決済み] git: fatal: リモートリポジトリから読み取れませんでした。
-
[解決済み] GitBash | origin master - rejected (fetch first) | GitHub リポジトリにファイルがない。
-
[解決済み] Gitのエラー「object file ... is empty」はどうすれば直せますか?
-
[解決済み】既存のGitブランチをリモートブランチに追従させる?
-
[解決済み】なぜ「git push --set-upstream origin <branch>」をしなければならないのでしょうか?