Скажем, я нахожусь в дороге с другом, мы в автономном режиме из готического хранилища git. У меня есть рабочая копия (с папкой .git), и мой друг хочет помочь мне, поэтому он клонирует мой репозиторий git из моей рабочей копии и работает сам по себе, и, конечно, обе копии - это проверка, так что в принципе я не могу совершить и он не может толкать, пока один из нас не сделает ветку. Есть лучший способ сделать это? есть ли способ не иметь наш местный мастер-контроль? Я предполагаю, что я всегда могу создать голый git локально, и мы оба можем указать на него, но это похоже на убийство. Цель состоит в том, чтобы он легко сменил свое изменение на мое, а затем, когда я буду в сети, я все это сделаю.Git on the road - push error '[remote reject] master -> master (ветвь в данный момент вычеркнута)'
Git on the road - push error '[remote reject] master -> master (ветвь в данный момент вычеркнута)'
ответ
Есть некоторые недостающие вопросы, но я попытаюсь ответить в любом случае. Прежде всего, если у вас есть собственные копии репо, вы оба должны иметь возможность вносить изменения в свои локальные копии.
Если ваш друг пытается подтолкнуть свои изменения к местному репо, похоже, что он не работает, потому что у вас в настоящее время есть master
, что имеет смысл в качестве функции безопасности ... вы не хотели бы иметь Гит молча заменит вашу рабочую копию прямо под носом без предупреждения. Вы можете позволить Git переместить master
ответвление/ссылку/метки/указатель, проверяя фиксации его на непосредственно:
$ git checkout head
Тогда ваш друг будет, вероятно, сможет протолкнуть свои изменения в свой репозиторий. После того, как он сделал, убедитесь, что проверка на master
филиал снова в вашем репо (если вы хотите работать на нем):
$ git checkout master
Однако люди обычно не толкать изменения в личных/частных РЕПО других людей. Обычно они отправляют друг другу запросы на тягу, а fetch
- изменения друг друга. Таким образом, вы могли бы добавить ваш друг отдаленные и fetch
его изменений, а затем merge
их (или pull
сделать оба):
$ git add <friend name> <url or path to friend remote>
$ git fetch <friend remote>
$ git merge <friend>/master
# Or combine fetch and merge using pull
$ git pull <friend> master
В качестве альтернативы, вместо извлечения и слияния (или вытягивать) изменения вашего друга в вашу локальную master
отрасли вы можете перебазироваться локальные изменениями на вершине его изменения:
$ git fetch <friend remote>
$ git rebase <friend>/master master
точно, есть ли способ, чтобы мой местный мастер не проверил? так что мой друг может нажать, тогда я сделаю попытку и совершу .... спасибо, я попробую все решения, которые вы предлагаете, чтобы посмотреть, что является самым простым рабочим решением - еще раз спасибо. – wily
Спасибо Cupcake все хорошо работает с 2 решения, которые вы предлагаете. – wily
Думаю больше об этом Я могу пойти с созданием голого репозитория (решение Себастьяна) в случае, если кто-то еще добавит .... думал, что я всегда могу добавить дополнительный удаленный репозиторий друзей, если захочу ... wow git действительно универсален. (все еще учись, извините, если мои вопросы не всегда были предельно ясными) – wily
Просто не используйте push. Добавьте друг друга как удаленный и используйте git fetch/merge, cherry-pick, rebase или все, что вам подходит, чтобы вкладывать друг в друга вклады.
отлично работает - спасибо! – wily
@ ответ кекса в порядке, но нет ничего излишества о создании голого репо на вашей машине, которая действует в качестве центрального удаленного хранилища для вас и твой друг. Это на самом деле намного проще и делает жизнь легче, когда его установки:
Подготовьте новый голый репозиторий
mkdir newrepo
cd newrepo
git init --bare
Назад к существующему репо:
git remote add new_repo_alias /path/to/newrepo
git push new_repo_alias something
Ваш друг делает то же самое, используя ssh://...
, но вы уже разобрались в этой части.
простой!
благодарит Себастьяна, да, новый репо будет работать наверняка; и позвольте сказать, что я в сети в течение 1 часа, поэтому я хочу передать все, что это лучший способ сделать это? например, я вытаскиваю все из newrepo, а затем меняю свое дистанционное репо на официальное онлайн-приложение, нажимаю все, а затем отменяю newrepo как удаленный, чтобы мы могли продолжать работать без официального онлайн-репо? merci – wily
Работает отлично-thanks Sebastien – wily
привет, лучший способ сделать это - просто добавить онлайн-репозиторий в качестве второго пульта на вашем местном: 'git remote add online-repo-alias url-of-online-repo'. Тогда просто «git push online-repo-alias branchname» –
Возможно, связано или повторяется: [Git push error '\ [remote reject \] master -> master (ветвь в настоящий момент выгружена)'] (http://stackoverflow.com/questions/2816369/git-push-error -Дистанционный отклоненный-мастер-мастер Гис-это-настоящее время проверяется). –
Как возможно, что ни один из вас не может совершить ваши собственные местные клоны? Вы имеете в виду, что ни один из вас не может *** подтолкнуть *** изменения друг к другу? В Git есть две разные вещи. Подробности важны! Кроме того, что вы имеете в виду, когда ваш друг «клонирует вашу рабочую копию»? Вы не можете клонировать Git repo из рабочей копии, потому что они не содержат истории, вы можете клонировать только из других репозиториев. Пожалуйста, уточните свой вопрос. –
спасибо Cupcake, моя рабочая рабочая копия сделана из моей рабочей копии git-репозитория. Поэтому я не могу совершить, и он может совершить, но он не может нажать на мой рабочий репозиторий git-копии (удаленный для него), так как оба являются checkout, поэтому мы можем заставить его работать так, как указано, создавая ветку, но это кажется немного излишним. Есть ли способ не иметь мою локальную копию рабочей копии? В то же время мы пытались хорошо работать, но также немного переусердствовали, чтобы создать голый репозиторий на моем ноутбуке, и он и я создаем клон git оттуда ... но это немного избыточно. – wily