gitでorigin / masterの場所を見つけるにはどうすればよいですか?また、どのように変更しますか?
-
07-07-2019 - |
質問
私はGit初心者です。私は最近、RailsプロジェクトをSubversionからGitに移動しました。ここでチュートリアルに従いました: http://www.simplisticcomplexity.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/
また、コードを保存するためにunfuddle.comを使用しています。次のコマンドを使用して、電車に乗っているMacのラップトップで仕事を行ったり来たりして変更を加え、ネットワーク接続があるときにそれらを混乱させないようにします。
git push unfuddle master
展開にはCapistranoを使用し、masterブランチを使用して混乱のないリポジトリからコードをプルします。
最近、「git status」を実行すると、次のメッセージが表示されます。私のラップトップで:
# On branch master
# Your branch is ahead of 'origin/master' by 11 commits.
#
nothing to commit (working directory clean)
そして、私はその理由について混乱しています。私は自分のラップトップが起源だと思っていました...しかし、私が元々Subversionから引っ張ったかUnfuddleにプッシュしたという事実がメッセージの表示の原因であるかどうかはわかりません。方法:
- Gitが「オリジン/マスター」と考える場所を見つけますか
- 別の場所にある場合、ラップトップを「オリジン/マスター」にするにはどうすればよいですか
- このメッセージを取得して消えます。 Gitは何かに不満を感じているように思えます。
私のMacはGitバージョン1.6.0.1を実行しています。
dbrの提案に従って git remote show origin
を実行すると、次のメッセージが表示されます。
~/Projects/GeekFor/geekfor 10:47 AM $ git remote show origin
fatal: '/Users/brian/Projects/GeekFor/gf/.git': unable to chdir or not a git archive
fatal: The remote end hung up unexpectedly
Aristotle Pagaltzisが提案したように git remote -v
を実行すると、次のようになります:
~/Projects/GeekFor/geekfor 10:33 AM $ git remote -v
origin /Users/brian/Projects/GeekFor/gf/.git
unfuddle git@spilth.unfuddle.com:spilth/geekfor.git
今、興味深いことに、私は geekfor
ディレクトリでプロジェクトに取り組んでいますが、私の起源は gf
ディレクトリのローカルマシンであると言います。 gf
は、プロジェクトをSubversionからGitに変換するときに使用した一時ディレクトリであり、恐らく混乱から解放した場所だと思います。その後、unfuddleから geekfor
ディレクトリに新しいコピーをチェックアウトしたと思います。
だから、dbrのアドバイスに従って次のようにする必要があるようです:
git remote rm origin
git remote add origin git@spilth.unfuddle.com:spilth/geekfor.git
解決
1。
Gitが「origin / master」がgit-remote
git remote show origin
..これは次のようなものを返します。
* remote origin
URL: me@remote.example.com:~/something.git
Remote branch merged with 'git pull' while on branch master
master
Tracked remote branch
master
リモートは基本的にリモートリポジトリへのリンクです。するとき..
git remote add unfuddle me@unfuddle.com/myrepo.git
git push unfuddle
.. gitは、追加したアドレスに変更をプッシュします。リモートリポジトリ用のブックマークのようなものです。
git status
を実行すると、(ローカルリポジトリと比較して)リモートにコミットがないかどうかが確認され、コミットがある場合はコミットの数が確認されます。すべての変更を" origin"にプッシュすると、両方が同期されるため、そのメッセージは表示されません。
2。
他の場所にある場合、ラップトップを「オリジン/マスター」にするにはどうすればよいですか
これを行う意味はありません。 「起源」と発声してくださいは「ラップトップ」に名前が変更されます。 -ラップトップから git push laptop
を実行したくない。
元のリモートを削除する場合は、削除します。
git remote rm origin
これは何も削除しません(file-content / revisions-historyに関して)。これにより、「ブランチは先に進んでいます。」が停止します。リポジトリをリモートと比較しなくなります(なくなったためです!)
覚えておくべきことの1つは、 origin
について特別なものは何もないということです。これはgitが使用するデフォルトの名前です。
Gitは、 git push
や git pull
などの操作を行う場合、デフォルトで origin
を使用します。そのため、よく使用するリモートがある場合(あなたの場合はUnfuddle)、unfuddleを" origin"として追加することをお勧めします:
git remote rm origin
git remote add origin git@subdomain.unfuddle.com:subdomain/abbreviation.git
またはset-urlを使用して1つのコマンドで上記を実行します:
git remote set-url origin git@subdomain.unfuddle.com:subdomain/abbreviation.git
その後、 git push unfuddle master
git push
または git pull
を実行して更新できます。 他のヒント
「あなたのブランチは...」というメッセージの説明を求めてこの質問に来ました。 gitの一般的なスキームではここには答えはありませんでしたが、「あなたのブランチは「オリジン/マスター」より先です」というフレーズを検索すると、この質問が現在Googleの上部に表示されているため、メッセージが何であるかがわかりました本当に、ここに情報を投稿すると思った。
つまり、Git初心者であるため、私が必要とする答えは明らかに初心者向けの答えだったことがわかります。具体的には、「あなたのブランチが先に進んでいる...」フレーズとは、ローカルリポジトリに追加してコミットしたファイルが存在するが、オリジンにプッシュしたことがないことを意味します。このメッセージの意図は、少なくとも私にとっては「git diff」が違いを示さないという事実によってさらに不明瞭になります。 「git diff origin / master」を実行するまでそうではありませんでした。ローカルリポジトリとリモートマスターの間に違いがあると言われました。
したがって、明確にするために:
"あなたのブランチは先んじています..." =>リモートマスターにプッシュする必要があります。 " git diff origin / master" を実行して、ローカルリポジトリとリモートマスタリポジトリの違いを確認します。
これが他の初心者にも役立つことを願っています。
(また、マスターが実際に「リモート」ではない可能性があり、「origin」が慣例で使用される再構成可能な名前であるなど、このソリューションを部分的に無効にする可能性のある設定の微妙な点があることを認識していますが、しかし、初心者はそのようなことを気にしません。私たちは単純でわかりやすい答えが欲しいです。後ほど、差し迫った問題を解決したら、微妙な点について読むことができます。)
アール
作業ディレクトリが Xコミットによって元の場所にある
の場合と同様の問題がありましたが、 git pull
により Everything up-最新
。 このアドバイスに従って修正しました。同様の問題を抱えている他の人に役立つ場合に備えて、ここに投稿しています。
基本的な修正は次のとおりです。
$ git push {remote} {localbranch}:{remotebranch}
括弧内の単語をリモート名、ローカルブランチ名、リモートブランチ名に置き換える必要がある場所。例:
$ git push origin master:master
オリジンマスターのローカルキャッシュバージョン(オリジン/マスター)と真のオリジンマスタに違いがある場合があります。
git remote update
を実行すると、origin masterがorigin / masterと再同期されます
この質問に対する受け入れられた回答を見る
ラップトップが原点だと思いました…
そのような無意味な種類: origin
はデフォルトのリモートリポジトリを指します–通常は他の人の変更を取得/プルします。
方法:
-
git remote -v
は、origin
が何であるかを表示します。origin / master
は、あなたの“ブックマーク”です。origin
リポジトリのmaster
ブランチの最後の既知の状態、および独自のmaster
はorigin / master
の追跡ブランチ。 これはすべてのとおりです。 -
あなたはドン’ t。少なくとも、リポジトリがそれ自体のデフォルトのリモートリポジトリであることは意味がありません。
-
tではありません。これは、リモートリポジトリにない(そのリポジトリの最後の既知の状態に応じて)ローカルでかなりの数のコミットを行ったことを伝えるだけです。
[ソリューション]
$ git push origin
^これで解決しました。 それが何をしたか、それは私のマスター(ラップトップ上で)を" origin"と同期させました。リモートサーバー上にあります。
私はこの問題に苦労しており、以前の回答のどれも、私が見ているように質問に取り組んでいない。私は問題を明確にすることができるかどうかを確認するために、問題をその基本に戻しました。
新しいリポジトリ(rep1)を作成し、その中に1つのファイルを入れてコミットします。
mkdir rep1
cd rep1
git init
echo "Line1" > README
git add README
git commit -m "Commit 1"
rep1のクローンを作成し、rep2と呼びます。 rep2の内部を見ると、ファイルが正しいことがわかります。
cd ~
git clone ~/rep1 rep2
cat ~/rep2/README
rep1で、ファイルに1つの変更を加えてコミットします。次に、rep1でrep2を指すリモートを作成し、変更をプッシュします。
cd ~/rep1
<change file and commit>
git remote add rep2 ~/rep2
git push rep2 master
今、rep2に移動して「git status」を実行すると、起源より先にいるというメッセージが表示されます。
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: README
#
rep2のREADMEは、2回目のコミット前の元の状態です。私が行った唯一の変更はrep1に対するもので、私がしたかったのはrep2にプッシュすることだけでした。私が把握していないのは何ですか?
「プッシュ」するのを待っています。試してください:
$ git push
最近この問題が発生しましたが、不要になったファイルをいくつか削除したためだと考えました。問題は、gitがファイルが削除されたことを認識せず、サーバーがまだ持っていることを認識していることです。 (サーバー=オリジン)
だから私は走った
git rm $(git ls-files --deleted)
そして、コミットとプッシュを実行しました。
これで問題は解決しました。
私もgit初心者です。 「あなたのブランチはオリジン/マスターよりNコミット先です」というメッセージで同じ問題がありました。提案された 'git diff origin / master'を実行すると、いくつかの差分が表示されましたが、私はそれを維持することを気にしませんでした。だから...
私のgitクローンはホスティング用であり、マスターリポジトリの正確なコピーが必要であり、ローカルの変更を保持する必要がないため、リポジトリ全体を保存して新しいリポジトリを作成することにしました。
(ホスティングマシン上)
mv myrepo myrepo
git clone USER@MASTER_HOST:/REPO_DIR myrepo
便宜上、ホスティングマシンのクローンに変更を加えていました。もういや。マスターにこれらの変更を加え、そこにgit commitして、git pullを実行します。うまくいけば、これによりホスティングマシン上のgitクローンが完全に同期されます。
/奈良
レポについても同じことを考えていました。私の場合、私はもうプッシュしていない古いリモコンを持っていたので、それを削除する必要がありました。
リモートのリストを取得:
git remote
不要なものを削除する
git remote rm {insert remote to remove}
独自のコミットが行われる前に特定のコミットにリセットすることが可能です。
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
nothing to commit (working directory clean)
git log
を使用して、ローカルの変更が行われる前に行っていたコミットを見つけます。
$ git log
commit 3368e1c5b8a47135a34169c885e8dd5ba01af5bb
...
commit baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
...
ローカルコミットをメモし、前のコミットに直接リセットします:
git reset --hard baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
問題がありました&quot;あなたのブランチはnnコミットで 'origin / master'よりも先にあります。 ''私がリモートリポジトリにプッシュしたとき:
git push ssh://git@xxx.repositryhosting.com/yyy/zzz.git
リモートアドレスがファイル.git / FETCH_HEADにあり、使用されていることがわかった場合:
git push
問題は消えました。