понимание git fetch, а затем слияние
исходя из фона svn, у меня был этот вопрос:
git эквивалент статуса svn-u
(что такое Git эквивалент svn status -u)
и я понимаю, что вы делаете:
git fetch
git log ..origin/master
но, я предполагаю, что origin/master часть зависит от отделения? Это не обязательно будет мастер, если я отслеживаю удаленную ветку?
я тоже не понимаю git merge origin/master точно. Я предполагаю, что это просто означает, что git fetch схватил изменений с пульта дистанционного управления и поместите их в систему базы данных git как origin/master, и я просто мастер? Что делать, если я принес изменения, проверить, что было сделано, в ужасе от изменений и не хотят сливаться? Как мне в принципе отказаться от них?
2 ответов:
git fetch
git fetchзахватывает изменения из удаленного репозитория и помещает их в базу данных объектов вашего репозитория. Он также извлекает ветви из удаленного репозитория и сохраняет их как удаленные ветки.когда вы получаете git говорит вам, где он хранит каждую ветвь на удаленном репозитории он получает. Например, вы должны увидеть что-то вроде
7987baa..2086e7b master -> origin/masterпри получении. Это означает, что 'происхождения/мастер' магазины 'мастер' на 'происхождение' репозиторий.
если вы посмотрите
.git/configфайл, вы увидите следующий фрагмент:[remote "origin"] url = git://git.example.com/repo.git fetch = +refs/heads/*:refs/remotes/origin/*это (среди прочих) означает, что любая ветвь " A " ("refs/heads/A") в origin remote (репозиторий, из которого вы клонировали) будет сохранена как "origin/a" ("refs/remotes/origin/A").
git log ..происхождение / мастер
как вы можете видеть, "origin / master "является" master " в origin. Если вы включены (по умолчанию) 'master' ветка, значит
git log ..origin/master, что эквивалентноgit log HEAD..origin/master, который, когда на ветке "master" эквивалентенgit log master..origin/masterперечислит все коммиты, которые находятся в ветке "master" в удаленном репозитории и не находятся в локальной ветке "master", где вы выполняете свою работу.более общая версия в современном git (предполагая, что информация о восходящем потоке / отслеживании существует) будет использовать просто
$ git log ..@{u}(здесь
@{u}- это синоним@{upstream}см. gitrevisions страница справочника.)git merge origin / master
git mergeиспользуется для соединения двух строк в истории. Если одна из сторон не выполняла никакой работы с момента последней точки ветвления (с момента основания слияния), ситуация либо вперед (ветвь, на которой вы находитесь, просто обновляется до конца ветви, которую вы объединяете), или вверх-к-дата (нет ничего нового для слияния, и ветка, на которой вы находитесь, остается неизменной).
git fetchзатемgit merge origin/master, когда на ветке "master", эквивалентно выдаче$ git pull
если вы не хотите сливаться, вам это не нужно. Обратите внимание, что вы можете использовать, например,
git reset --hard HEAD@{1}чтобы вернуться и отбросить результатgit pullесли вам это не нравится.
git fetchзагружает все изменения, необходимые для представления данной удаленной ветке. Как правило, этоorigin/masterили аналогичные.
git mergeобъединяет две ветви вместе путем создания новых коммитов или быстрой переадресации (или комбинации). Это не меняет никаких коммитов, которые вы сделали, и вы всегда можете вернуться к своей старой ветке (используяgit resetилиgit checkout).отметим, что
git pullиgit fetchследовал поgit merge(илиgit rebaseесли--rebaseдано).
Comments