Что такое команда git для извлечения и объединения изменений без ускоренной перемотки с промежуточного (чистого) USB-накопителя? - PullRequest
0 голосов
/ 07 октября 2019

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

Я внес некоторые изменения в мой каталог dev. Я совершил их;Я подтолкнул их к флешке. После того, как я перенес USB-флешку на компьютер с доступом к репо, сбой git push не состоялся, потому что это не было быстрой пересылкой на источник. Коллега проделал некоторую работу и совершил свои изменения, и теперь фактически было две ветви. Затем я выполнил git fetch, который вытащил коммиты моего коллеги из источника на USB-накопитель.

Однако на USB-накопителе с голым репозиторием все еще были свои refs /heads / master, указывающие на изменения, которые я нажалс моего устройства разработки на флешку, пока refs / remote / origin / master указывал на изменения моего коллеги, которые я вытащил из источника на флешку.

Я смог загрузить изменения на USBПридерживайтесь, но теперь я не знаю, как слить их на ПК разработчика. Простой git merge в моем рабочем каталоге говорит мне: «Уже в курсе». Простое git merge в моем голом репозитории USB говорит мне «Фатально: эта операция должна выполняться в рабочем дереве».

Внутри чистого репозитория USB-флешки git show-ref говорит мне, что у меня refs/head/masterи refs/remote/origin/master, но я не знаю команду для выполнения внутри дерева разработки, которая объединит мое дерево с удаленными / origin / master изменениями.

Ответы [ 2 ]

2 голосов
/ 07 октября 2019

Извлеките из репозитория USB-флешки в ваш репозиторий на сервере и объедините результат.

git remote add USB /path/to/your/mountable/repo    # once
git fetch USB
git merge USB/master

edit: ах, ладно, ваши исходные / основные изменения не были переданы или отражены в вашем репозитории USB дляпо какой-то причине вы загрузили их в пульт дистанционного управления.

git fetch USB +refs/remotes/*:refs/remotes/*

извлечет refs/remotes/origin/master с вашего USB-накопителя в refs/remotes/origin/master (и аналогично со всеми удаленными ссылками USB) на вашем.

edit: re + refs / remotes / *: etc, это refspec, посмотрите документы для получения, push и fetch, используйте refspecs и объясните их. Это источник: шаблон назначения с начальным + для разрешающих перезаписей, Git достаточно разумно заполняет значения по умолчанию, чтобы, возможно, даже было слишком легко не знать, что это происходит. По умолчанию используется указатель выборки +refs/heads/*:refs/remotes/origin/*, который аккуратно отображает ветви удаленного узла на локальные ссылки отслеживания.

Также см. Документы для ревизий, git пробует написание, которое вы даете, затем пробует refs/, затем refs/tags, затем refs/heads, затем refs/remotes префиксы. SO origin/master обычно находит refs/remotes/origin/master.

0 голосов
/ 07 октября 2019

Кажется, коренная причина проблемы в том, что моя флешка (которую я называю usbf) имеет ветку usbf / master, которая не такая же фиксация, как origin / master. Когда я внес свои изменения в нее, палка стала своего рода ветвью по отношению к origin / master. Когда я получил изменения от источника, на моей флешке теперь было две ссылки, по одной на каждую ветку.

Я смог выполнить свою миссию, используя https://stackoverflow.com/a/45999240/995935 в качестве отправной точки.

В репозитории USB-накопителя я сделал

git branch -f master c0094ac0

, так что теперь мастер на USB-накопителе совпадает с мастером оригинала. Это также имело побочный эффект превращения моей цепочки коммитов на флешку в немеченую ветвь (думаю? В любом случае это не реальная проблема, это просто флешка)

После этого,Я смог прыгнуть в каталог dev и сделать git fetch, чтобы получить изменения, и git merge, чтобы объединить их. После этого git push на флешку;с последующей сменой компьютеров и git push от USB до основного репо, я перешел в целевое состояние.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...