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

Я новичок Git. Недавно я перевел проект Rails из Subversion в Git. Я следовал учебнику здесь: http://www.simplisticcomplexity.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/

Я также использую unuddle.com для хранения моего кода. Я делаю изменения на своем ноутбуке Mac на поезде в/из работы, а затем нажимаю на них, чтобы отключиться, когда у меня есть сетевое подключение, используя следующую команду:

git push unfuddle master

Я использую Capistrano для развертывания и вытаскиваю код из репозитория без очереди, используя главную ветвь.

В последнее время я заметил следующее сообщение при запуске "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.


Когда я запускаю 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    [email protected]:spilth/geekfor.git

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

Итак, похоже, что я должен следовать совету dbr и делать:

git remote rm origin
git remote add origin [email protected]:spilth/geekfor.git

Ответ 1

1. Узнайте, где Git думает, что "источник/мастер" использует 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. Если это где-то еще, как превратить мой ноутбук в "источник/мастер"?

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

Если вы хотите удалить пульт дистанционного управления, вы делаете..

git remote rm origin

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

Следует помнить, что в origin нет ничего особенного, это просто имя по умолчанию Git.

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

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

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

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

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

Ответ 2

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

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

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


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


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

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

Earl

Ответ 3

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

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

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

Если слова в скобках должны быть заменены вашим удаленным именем, вашим локальным именем ветки и именем удаленной ветки. например.

$ git push origin master:master

Ответ 4

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

Если вы запустите git remote update, это приведет к повторной синхронизации оригинала с начальным/основным

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

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

Ответ 5

Я думал, что мой ноутбук был источником...

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

Как я могу:

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

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

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

Ответ 6

[Решение]

$ git push origin

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

Ответ 7

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

Я создаю новый репозиторий (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. Что я не понимаю?

Ответ 8

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

$ git push

Ответ 9

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

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

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

Затем запустили фиксацию и нажмите.

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

Ответ 10

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

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

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

mv myrepo myrepo
git clone [email protected]_HOST:/REPO_DIR myrepo

Для целесообразности, я использовал для внесения изменений в клон на моем хостинге. Больше не надо. Я сделаю эти изменения хозяину, git зафиксировать там и сделаю git pull. Надеюсь, это должно сохранить мой git клон на хостинге в полной синхронизации.

/Nara

Ответ 11

Мне было интересно то же самое о моем репо. В моем случае у меня был старый пульт, который я больше не толкал, поэтому мне нужно было его удалить.

Получить список пультов:

git remote

Удалите тот, который вам не нужен.

git remote rm {insert remote to remove}

Ответ 12

Можно выполнить reset определенное коммитирование до того, как произойдут ваши собственные фиксации.

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

Обратите внимание на локальные коммиты и reset непосредственно на предыдущую фиксацию:

git reset --hard baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e

Ответ 13

У меня возникла проблема: "Ваша ветка опережает" происхождение/мастер "nn совершает". когда я переместился в удаленный репозиторий с помощью:

git push ssh://[email protected]/yyy/zzz.git

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

git push

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