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


Я новичок в Git. Я недавно переехал рельсы проекта из 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. узнайте, где ГИТ думает "происхождение / мастер" это?
  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 и делать:

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

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"?

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

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

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

Я пришел к этому вопросу, ища объяснение о том, что сообщение "Ваша ветка впереди..."значит, в общей схеме ГИТ. Здесь не было ответа на этот вопрос, но поскольку этот вопрос в настоящее время отображается в верхней части 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

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

Если вы запустите git remote update Это позволит выполнить повторную синхронизацию мастер происхождения происхождения/мастер

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

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

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

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

как я могу:

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

[ решение ]

$ 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", мне говорят, что я опережаю 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
#

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 коммитам."когда я нажал на удаленный репозиторий с:

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

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

git push

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