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

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

Если вы хотите удалить исходный пульт, вы делаете ..

git remote rm origin

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

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

Git по умолчанию использует origin , когда вы делаете такие вещи, как git push или git pull . Так что, если у вас есть пульт, которым вы часто пользуетесь (в вашем случае - Unuddle), я бы рекомендовал добавить Unuddle в качестве " 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" чтобы увидеть различия между вашим локальным репозиторием и удаленным главным репозиторием.


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

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

Эрл

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

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

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

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

$ git push origin master:master

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

Если вы запустите удаленное обновление git , это повторно синхронизирует мастер источника с источником / мастером

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

Различия между мастером происхождения git pull и amp; git pull origin / master

  

Я думал, что мой ноутбук был источником & # 8230;

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

  

Как я могу:

<Ол>
  • git remote -v покажет вам, что такое origin ; origin / master - это ваша & # 8220; закладка & # 8221; для последнего известного состояния ветви master в хранилище origin , а ваш собственный master - это ветвь отслеживания для origin / master . Это все как и должно быть .

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

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

  • [Решение]

    $ git push 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 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
    #
    

    README в rep2 такой же, какой она была изначально, до второй фиксации. Единственные изменения, которые я сделал, - это 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 и выполню 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
    

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top