Как найти местоположение origin / master в git, и как его изменить?

Я новичок 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

I используйте Capistrano для развертывания и извлеките код из репозитория unfuddle с помощью главной ветви.

в последнее время я заметил следующее сообщение, когда я запускаю "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. если это где-то еще, как я могу превратить свой ноутбук в "origin/master"?
  3. вам это сообщение, чтобы уйти. Это заставляет меня думать, что ГИТ чем-то недоволен.

мой mac работает под управлением git версии 1.6.0.1.


когда я запускаю git remote show origin как предложено dbr, я получаю следующее:

~/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

когда я запускаю 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 был временным каталогом, который я использовал при преобразовании моего проекта из Subversion в Git и, вероятно, где я нажал, чтобы развернуть. Затем, кажется, я проверил свежую копию от unfuddle до .

таким образом, похоже, я должен следовать совету dbr и do:

git remote rm origin
git remote add origin git@spilth.unfuddle.com:spilth/geekfor.git

13 ответов


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. если это где-то еще, как я могу превратить свой ноутбук в "origin/master"?

нет смысла делать это. Скажем, "origin" переименован в "laptop" - вы никогда не захотите этого делать git push laptop С вашего ноутбука.

если вы хотите удалить origin remote, вы делать..

git remote rm origin

это не удалит ничего (с точки зрения содержимого файла/ревизий-истории). Это остановит "ваш филиал впереди.."сообщение, так как оно больше не будет сравнивать ваш репозиторий с пультом дистанционного управления (потому что он исчез!)

одна вещь, чтобы помнить, что нет ничего особенного origin, это просто имя по умолчанию, которое git использует.

Git использует origin по умолчанию, когда вы делаете вещи, как git push или git pull. Итак, если у вас есть пульт вы используете много (Unfuddle, в вашем случае), я бы рекомендовал добавить unfuddle как "origin":

git remote rm origin
git remote add origin git@subdomain.unfuddle.com:subdomain/abbreviation.git

или выполните вышеуказанное в одной команде, используя set-url:

git remote set-url origin git@subdomain.unfuddle.com:subdomain/abbreviation.git

затем вы можете просто сделать git push или git pull для обновления вместо git push unfuddle master


Я пришел к этому вопросу, ища объяснение о том, что сообщение"ваш филиал впереди..."значит, в общей схеме git. Здесь не было ответа на этот вопрос, но поскольку этот вопрос в настоящее время появляется в верхней части Google, когда вы ищете фразу "Ваша ветвь опережает" origin/master", и с тех пор я понял, что на самом деле означает сообщение, Я думал, что опубликую информацию здесь.

Итак, будучи новичком git, я вижу, что ответ, который мне нужен, был отчетливо ответ новичка. В частности, что "ваш филиал впереди..."фраза означает, что есть файлы, которые вы добавили и передали в свой локальный репозиторий, но никогда не нажимали на источник. Смысл этого сообщения еще более запутан тем фактом, что "git diff", по крайней мере для меня, не показал никаких различий. Только когда я запустил "git diff origin / master", мне сказали, что есть различия между моим локальным репозиторием и удаленным мастером.

Итак, быть ясно:


"ваш филиал впереди..." => вам нужно нажать на удаленный мастер. Запустить "git diff origin/master" чтобы увидеть, каковы различия между вашим локальным репозиторием и удаленным основным репозиторием.


надеюсь, это поможет другим новичкам.

(кроме того, я признаю, что есть тонкости конфигурации, которые могут частично аннулировать это решение, например, тот факт, что мастер на самом деле не может быть "удаленный", и что "происхождение"является реконфигурируемым именем, используемым конвенцией и т. д. Но новичков это не волнует. Нам нужны простые, прямые ответы. О тонкостях мы сможем прочитать позже, когда решим насущную проблему.)

Ярл


у меня была проблема, похожая на эту, Где мой рабочий каталог был ahead of origin by X commits но git pull в результате Everything up-to-date. Мне удалось исправить это, следуя этот совет. Я размещаю это здесь, если это поможет кому-то еще с подобной проблемой.

основное исправление выглядит следующим образом:

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

где слова в скобках следует заменить удаленного имя, имя локального филиала и удаленного филиала. например,

$ git push origin master:master

иногда существует разница между локальной кэшированной версией origin master (origin/master) и истинным мастером origin.

Если вы запустите git remote update Это будет resynch origin master с origin / master

см. принятый ответ на этот вопрос

различия между git pull origin master и git pull origin / master


Я думал, что мой ноутбук был происхождение...

это бессмысленным: origin относится к удаленному репозиторию по умолчанию – тому, из которого вы обычно извлекаете/извлекаете изменения других людей.

как я могу:

  1. git remote -v покажет вам, что такое origin; в origin/master - это "закладка" для последнего известного состояния master филиала origin репозиторий, и свой собственный master - это филиала слежения на origin/master. это все так и должно быть.

  2. ты не знаешь. По крайней мере, для репозитория нет смысла быть удаленным репозиторием по умолчанию для себя.

  3. это не так. Это просто говорит вам, что вы сделали так-то и так-то много коммитов локально, которые не находятся в удаленном репозитории (в соответствии с последним известным состоянием этого репозитория).


[ решение ]

$ git push origin

^ это решило его для меня. Что он сделал, он синхронизировал мой мастер (на ноутбуке) с "origin", который находится на удаленном сервере.


Я борюсь с этой проблемой и ни один из предыдущих ответов решать вопрос, как я это вижу. Я раздел проблему до ее основ, чтобы увидеть, могу ли я сделать свою проблему ясной.

Я создаю новый репозиторий (rep1), помещаю в него один файл и фиксирую его.

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 я делаю одно изменение в файле и фиксирую его. Затем в rep1 я создаю удаленный пункт rep2 и подтолкнуть изменения.

cd ~/rep1
<change file and commit>
git remote add rep2 ~/rep2
git push rep2 master

теперь, когда я иду в rep2 и делаю "статус git", мне говорят, что я впереди происхождения.

# 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
#

README в rep2 так же, как и изначально, до второго коммита. Единственные изменения, которые я сделал, - это rep1, и все, что я хотел сделать, это вытолкнуть их в rep2. Чего я не понимаю?


Он ждет вас, чтобы "нажать". Попробуйте:

$ git push


недавно у меня была эта проблема, и я решил, что это потому, что я удалил некоторые файлы, которые мне больше не нужны. Проблема в том, что git не знает, что файлы были удалены, и он видит, что сервер все еще имеет его. (сервер = происхождение)

Итак, я побежал

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

а потом побежал commit и push.

это решило проблему.


Я тоже новичок git. У меня была такая же проблема с сообщениями "ваша ветвь опережает origin/master by N commits". Выполнение предложенного "git diff origin / master" показало некоторые различия, которые я не хотел сохранять. Так. ..

Так как мой git-клон был для хостинга, и я хотел точную копию мастер-РЕПО, и не хотел хранить какие-либо локальные изменения, я решил сохранить все мое РЕПО и создать новый:

(на хостинге машина)

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

для целесообразности я обычно вносил изменения в клон на моей хостинговой машине. Не более. Я внесу эти изменения в мастера, совершу там Git и сделаю 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

у меня была проблема "ваша ветвь опережает" origin / master " по NN commits."когда я нажал на удаленный репозиторий с:

git push ssh://git@xxx.repositryhosting.com/yyy/zzz.git

когда я обнаружил, что мой удаленный адрес был в файле .git / FETCH_HEAD и используется:

git push

проблема исчезла.