gitでorigin / masterの場所を見つけるにはどうすればよいですか?また、どのように変更しますか?

StackOverflow https://stackoverflow.com/questions/277077

  •  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にプッシュしたという事実がメッセージの表示の原因であるかどうかはわかりません。方法:

  1. Gitが「オリジン/マスター」と考える場所を見つけますか
  2. 別の場所にある場合、ラップトップを「オリジン/マスター」にするにはどうすればよいですか
  3. このメッセージを取得して消えます。 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と再同期されます

この質問に対する受け入れられた回答を見る

git pull originマスターとamp; git pull origin / master

  

ラップトップが原点だと思いました…

そのような無意味な種類: origin はデフォルトのリモートリポジトリを指します–通常は他の人の変更を取得/プルします。

  

方法:

  1. git remote -v は、 origin が何であるかを表示します。 origin / master は、あなたの“ブックマーク”です。 origin リポジトリの master ブランチの最後の既知の状態、および独自の master origin / master の追跡ブランチこれはすべてのとおりです。

  2. あなたはドン’ t。少なくとも、リポジトリがそれ自体のデフォルトのリモートリポジトリであることは意味がありません。

  3. 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

問題は消えました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top