понимание 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, и я просто мастер? Что делать, если я принес изменения, проверить, что было сделано, в ужасе от изменений и не хотят сливаться? Как мне в принципе отказаться от них?

732   2  
git

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

    Ничего не найдено.