2017-02-15 2 views
2

Я прочитал документацию о git merge --no-ff.git log after git merge --no-ff показывает, что все коммиты с другой ветки объединены

Я попробовал и результат:

Mini-de-MiniMac:ZtestGit minimac$ git branch 
    feature 
* master 

Mini-de-MiniMac:ZtestGit minimac$ git log --pretty=oneline 
82307080064b764c28622351a4c28abb4f9302b8 Merge branch 'feature' with --no-ff option 
50d9f108d70798a13cc25fb7321d57ad5ba61854 three 
d7163bc5320162689544293be1ac2228c6e3dc34 two 
a7ba4c797d49d940a7d64a8ddaba787eb013622a one 
cc3e4abf5dfad7779de3837a6c4e6e29e3ca87b2 start 

Mini-de-MiniMac:ZtestGit minimac$ git log --pretty=oneline --graph 
* 82307080064b764c28622351a4c28abb4f9302b8 Merge branch 'feature' with --no-ff option 
|\ 
| * 50d9f108d70798a13cc25fb7321d57ad5ba61854 three 
| * d7163bc5320162689544293be1ac2228c6e3dc34 two 
| * a7ba4c797d49d940a7d64a8ddaba787eb013622a one 
|/ 
* cc3e4abf5dfad7779de3837a6c4e6e29e3ca87b2 start  

Я удивлен, что я не понимаю: журнал мерзавца на мастер филиал показать все коммиты (один, два, три), но эти коммиты находятся в ветви признака, а не в качестве ведущего.

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

Так что интерес к git merge --no-ff заключается в том, чтобы работать с git log -graph и не только с git log?

Я добавлю еще более странное явление: когда я удаляю ветвь функции, git говорит, что ветвь удалена, но git log и git log -graph дают точно такой же результат, как и раньше: фиксации и ветвь функции все еще отображаются.
У вас есть объяснение?

Mini-de-MiniMac:ZtestGit minimac$ git branch 
    feature 
* master 

Mini-de-MiniMac:ZtestGit minimac$ git log --pretty=oneline 
82307080064b764c28622351a4c28abb4f9302b8 Merge branch 'feature' with --no-ff option 
50d9f108d70798a13cc25fb7321d57ad5ba61854 three 
d7163bc5320162689544293be1ac2228c6e3dc34 two 
a7ba4c797d49d940a7d64a8ddaba787eb013622a one 
cc3e4abf5dfad7779de3837a6c4e6e29e3ca87b2 start 
Mini-de-MiniMac:ZtestGit minimac$ git log --pretty=oneline --graph 
* 82307080064b764c28622351a4c28abb4f9302b8 Merge branch 'feature' with --no-ff option 
|\ 
| * 50d9f108d70798a13cc25fb7321d57ad5ba61854 three 
| * d7163bc5320162689544293be1ac2228c6e3dc34 two 
| * a7ba4c797d49d940a7d64a8ddaba787eb013622a one 
|/ 
* cc3e4abf5dfad7779de3837a6c4e6e29e3ca87b2 start 
Mini-de-MiniMac:ZtestGit minimac$ git branch 
    feature 
* master 


Mini-de-MiniMac:ZtestGit minimac$ git branch -d feature 
Deleted branch feature (was 50d9f10). 

Mini-de-MiniMac:ZtestGit minimac$ git branch 
* master 

Mini-de-MiniMac:ZtestGit minimac$ git log --pretty=oneline 
82307080064b764c28622351a4c28abb4f9302b8 Merge branch 'feature' with --no-ff option 
50d9f108d70798a13cc25fb7321d57ad5ba61854 three 
d7163bc5320162689544293be1ac2228c6e3dc34 two 
a7ba4c797d49d940a7d64a8ddaba787eb013622a one 
cc3e4abf5dfad7779de3837a6c4e6e29e3ca87b2 start 

Mini-de-MiniMac:ZtestGit minimac$ git log --pretty=oneline --graph 
* 82307080064b764c28622351a4c28abb4f9302b8 Merge branch 'feature' with --no-ff option 
|\ 
| * 50d9f108d70798a13cc25fb7321d57ad5ba61854 three 
| * d7163bc5320162689544293be1ac2228c6e3dc34 two 
| * a7ba4c797d49d940a7d64a8ddaba787eb013622a one 
|/ 
* cc3e4abf5dfad7779de3837a6c4e6e29e3ca87b2 start 

Спасибо.

+0

'git log --graph --decorate - all' может отображать более четкое изображение. –

+1

'git merge --no-ff' заставляет создавать слияние, поэтому вы всегда увидите коммиты на другой ветке, так как они являются предками созданной фиксации. Неважно, существует ли другая ветвь - коммиты есть, потому что они достижимы. –

+1

Если вам нужна только первая родительская история, скажите '- first-parent' – jthill

ответ

3

В журнале Git отображаются все коммиты, которые являются предками указанного вами опциона. Наличие или отсутствие других ветвей не имеет никакого эффекта. Он выполняет граф фиксации.

этих коммиты находятся на художественном отделении, не мастер

коммитов в мерзавце не «на» любую отрасли. Ветвь представляет собой подвижный указатель, который называет фиксацию (и по расширению - все предки этой фиксации).

Объединив ветвь вашей функции в мастер - либо путем быстрой перемотки вперед, либо путем слияния - вы перемещаете указатель ветвления мастера на некоторый фиксатор, новый для этой ветви. Эта фиксация имеет предыдущую фиксацию, которая была на хозяине как предок.

Итак, интерес к git merge --no-ff заключается в работе с git log -graph и не только в git-журнале?

Ценность при создании создания слияния заключается в записи того, что было объединено, и когда и кем. Репозиторий git хранит историю только в графе фиксации, ветви эфемерны.

+1

Я думаю, что лучше сказать, что Git совершает« on »(или« содержится в ») * любое число * ветвей. Однако с философской точки зрения это эквивалентно утверждению, что они не находятся на какой-либо определенной ветви (если, конечно, количество ветвей не равно 1). Во всяком случае, это правильный ответ, просто небольшая фраза с формулировкой. :-) – torek

+0

«Ветвь - это подвижный указатель, который называет фиксацию» - очень. Филиал часто представляет собой не что иное, как простой текстовый файл в '.git/refs/heads /'.Имя файла - это имя ветви, и единственным содержимым является * * (то есть единственная) контрольная сумма фиксации, на которую указывает. Иногда будет немного больше данных, связанных с веткой в ​​'.git/config', но это только описание ветви, если есть, и любые удаленные ветви, которые она настроена для отслеживания. – 8bittree

Смежные вопросы