web-dev-qa-db-ja.com

gitでOrigin / masterの場所を見つけるにはどうすればよいですか?それを変更するにはどうすればよいですか?

私は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ブランチを使用してunfuddleリポジトリからコードをプルします。

最近、ラップトップで「git status」を実行すると、次のメッセージに気付きました。

# On branch master
# Your branch is ahead of 'Origin/master' by 11 commits.
#
nothing to commit (working directory clean)

そして、その理由について私は混乱しています。私のラップトップはOriginだと思っていました...しかし、私が最初にSubversionからプッシュしたか、Push to Unfuddleにプッシュしたかが、メッセージが表示される原因かどうかわかりません。どうやって:

  1. Gitが「Origin/master」がどこにいるのかを調べますか?
  2. 他の場所にある場合、ラップトップを「Origin/master」にするにはどうすればよいですか?
  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    [email protected]:spilth/geekfor.git

興味深いことに、私はgeekforディレクトリでプロジェクトに取り組んでいますが、私のOriginはgfディレクトリにあるローカルマシンであると言っています。 gfは、プロジェクトをSubversionからGitに変換するときに使用した一時ディレクトリであり、おそらく混乱を避けるためにプッシュした場所だと思います。それから、unfuddleからgeekforディレクトリに新しいコピーをチェックアウトしたと思います。

だから、私はdbrのアドバイスに従って、行う必要があるように見えます:

git remote rm Origin
git remote add Origin [email protected]:spilth/geekfor.git
225
Brian Kelly

1. Gitが「Origin/master」が使用していると考える場所を見つける git-remote

git remote show Origin

..これは次のようなものを返します。

* remote Origin
  URL: [email protected]:~/something.git
  Remote branch merged with 'git pull' while on branch master
    master
  Tracked remote branch
    master

リモートは基本的にリモートリポジトリへのリンクです。すると….

git remote add unfuddle [email protected]/myrepo.git
git Push unfuddle

..gitは、追加したアドレスに変更をプッシュします。リモートリポジトリ用のブックマークのようなものです。

git statusを実行すると、リモートに(ローカルリポジトリと比較して)コミットが欠落しているかどうか、もしそうであれば、コミットの数だけチェックされます。すべての変更を「Origin」にプッシュすると、両方が同期されるため、そのメッセージは表示されません。

2.それが他の場所にある場合、ラップトップを「Origin/master」にするにはどうすればよいですか?

これを行う意味はありません。 「Origin」の名前が「laptop」に変更されたとします。ラップトップからgit Push laptopを実行することは決してありません。

Originのリモートを削除したい場合は、削除してください。

git remote rm Origin

これは何も削除しません(file-content/revisions-historyに関して)。これにより、リポジトリがリモートと比較されなくなるため(「なくなったために!」というメッセージが表示されます)。

覚えておくべきことの1つは、Originについて特別なものは何もないということです。これは、gitが使用するデフォルトの名前です。

Gitは、git Pushgit pullのようなことをするとき、デフォルトでOriginを使用します。したがって、よく使用するリモート(あなたの場合はUnfuddle)がある場合は、「Origin」としてunfuddleを追加することをお勧めします。

git remote rm Origin
git remote add Origin [email protected]:subdomain/abbreviation.git

または、set-urlを使用して1つのコマンドで上記を実行します。

git remote set-url Origin [email protected]:subdomain/abbreviation.git

その後、git Pushの代わりに、単にgit pullまたはgit Push unfuddle masterを実行して更新できます

192
dbr

Gitの一般的なスキームで、「あなたのブランチは先に進んでいます...」というメッセージが何を意味するかについての説明を探してこの質問に来ました。ここには答えはありませんでしたが、「あなたのブランチは「Origin/master」よりも先です」というフレーズを検索すると、この質問が現在Googleの上部に表示されているため、メッセージの意味を理解しました、ここに情報を投稿すると思いました。

ですから、Gitの初心者であるため、私が必要とする答えは明らかに初心者の答えだったことがわかります。具体的には、「あなたのブランチは先に進んでいます...」というフレーズは、ローカルリポジトリに追加してコミットしたが、Originにプッシュしたことがないファイルがあることを意味します。このメッセージの意図は、少なくとも私にとっては「git diff」が違いを示さなかったという事実によってさらに難読化されています。 「git diff Origin/master」を実行するまで、ローカルリポジトリとリモートマスターの間に違いがあると言われました。

したがって、明確にするために:


"あなたのブランチは先に..." =>リモートマスターにプッシュする必要があります。 "git diff Origin/master"を実行して、ローカルリポジトリとリモートマスターリポジトリの違いを確認します。


これが他の初心者にも役立つことを願っています。

(また、マスターが実際には「リモート」ではない、「Origin」は慣習で使用される再構成可能な名前であるなど、このソリューションを部分的に無効にする可能性のある設定の微妙な点があることを認識しています。その種のことは気にしないでください。私たちは単純でわかりやすい答えが欲しいです。差し迫った問題を解決したら、後で微妙な点について読むことができます。)

伯爵

285
Earl Jenkins

私の作業ディレクトリがahead of Origin by X commitsであったのに似た問題がありましたが、git pullEverything up-to-dateになりました。 このアドバイス に従って修正することができました。同様の問題を抱えている他の人に役立つ場合に備えて、ここに投稿しています。

基本的な修正は次のとおりです。

$ git Push {remote} {localbranch}:{remotebranch}

括弧内の単語は、リモート名、ローカルブランチ名、リモートブランチ名に置き換える必要があります。例えば.

$ git Push Origin master:master
38
Mims H. Wright

originマスターのローカルキャッシュバージョン(Origin/master)と真のOriginマスターとの間に違いがある場合があります。

git remote updateを実行すると、OriginマスターとOrigin/masterが再同期されます

この質問に対する受け入れられた答えを参照してください

git pull Origin masterとgit pull Origin/masterの違い

24
chim

私のラップトップが起源だと思った…

それは一種の無意味です:Originは、デフォルトのリモートリポジトリを指します。これは通常、他の人の変更を取得/プルするリポジトリです。

どうやって:

  1. git remote -vOriginが何であるかを示します。 Origin/masterは、masterリポジトリのOriginブランチの最後の既知の状態の「ブックマーク」であり、独自のmasterは、Origin/masterトラッキングブランチ です。 これがすべてあるべきです

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

  3. そうではありません。リモートリポジトリにない(そのリポジトリの最後の既知の状態に応じて)ローカルでかなりの数のコミットを行ったことを伝えるだけです。

9

[ソリューション]

$ git Push Origin

^これで解決しました。それがしたことは、(ラップトップ上の)マスターをリモートサーバー上の「Origin」と同期させたことです。

3
Chris

私はこの問題に苦労しており、これまでの回答のどれも私が見ているように質問に取り組んでいない。問題を明確にして問題を解決できるかどうかを確認するために、問題を基本に戻しました。

新しいリポジトリ(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」を実行すると、Originよりも先にいるというメッセージが表示されます。

# 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のREA​​DMEは、2回目のコミット前の元の状態です。私が行った唯一の変更はrep1に対するもので、私がしたかったのはrep2にプッシュすることだけでした。私が把握していないものは何ですか?

1
Steve Hindmarch

あなたが「プッシュ」するのを待っています。試してください:

$ git Push

1
Vino

私もgit初心者です。 「あなたのブランチはOrigin/master by N commitsより先です」というメッセージで同じ問題がありました。提案された「git diff Origin/master」を実行すると、いくつかの差分が表示されましたが、私はそれを維持することを気にしませんでした。そう ...

私のgitクローンはホスティング用であり、マスターリポジトリの正確なコピーが必要であり、ローカルの変更を保持する必要がないため、リポジトリ全体を保存して新しいリポジトリを作成することにしました。

(ホスティングマシン上)

mv myrepo myrepo
git clone USER@MASTER_Host:/REPO_DIR myrepo

便宜上、ホスティングマシンのクローンに変更を加えていました。もういや。マスターにこれらの変更を加え、そこにgit commitして、git pullを実行します。うまくいけば、これによりホスティングマシン上のgitクローンが完全に同期されたままになります。

/奈良

1
Nara Narasimhan

最近この問題が発生しましたが、不要になったファイルをいくつか削除したためだと考えました。問題は、gitがファイルが削除されたことを認識せず、サーバーがまだ持っていることを認識していることです。 (サーバー=オリジン)

だから私は走った

git rm $(git ls-files --deleted)

そして、コミットとプッシュを実行しました。

これで問題は解決しました。

1
looneydoodle

独自のコミットが実行される前に、特定のコミットにリセットすることが可能です。

$ 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
0
RobLoach

リポジトリについても同じことを考えていました。私の場合、私はもうプッシュしていない古いリモコンを持っていたので、それを削除する必要がありました。

リモートのリストを取得します。

git remote

不要なものを削除する

git remote rm {insert remote to remove}
0
Jason Rikard