Мерзавец: Не мог понять, почему ответвление (тема) фиксации/слияния происходит на основном ответвлении

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

Я люблю Мерзавца в эти дни. Особенно, ответвления темы. Я работаю над маленьким кодом, совместно использующим приложение. И у меня есть (локальные) ответвления как "ведущее устройство", "аутентификация", "закладки", "комментарии", "нос" и т.д...

Мой (намеченный) рабочий процесс проходит примерно так: Создайте ответвление темы ==>, Работа над ответвлением темы ==> Передает файлы ответвлению ==> Слияние изменения ответвления темы в "основном" ответвлении. (И позже удалите ответвление темы),

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

Для высказывания практического мнения вот, мой график мерзавца: http://github.com/none-da/zeshare/network

Вот команды, которые я использовал:

>> git branch authentication_feature
>> git checkout authentication_feature
>> # I work with all the files here in "authentication_feature" branch
>> git commit -m "Authentication_feature is up" # commiting to the branch
>> git branch # just to confirm, which branch I am working on
>> git checkout master # trying to shift to master branch
>> git merge --no-commit authentication_feature # I merge in two steps. This is step 1
>> git status;git add; git commit -m "Authentication_feature" merged to "master". # This is the step 2
>> git log --graph --pretty=oneline # confirming the graph
>> git push origin master # pushing to the remote server(github)

6
задан tshepang 3 May 2014 в 22:48
поделиться

5 ответов

Но позже, когда я проверил график git, даже если я следовал тому же рабочему процессу, все шансы происходили на «мастере». Никаких расходящихся и сходящихся линий деревьев!

Ну ... Я вижу некоторые из ваших ответвлений и слияний.

На этой странице вы найдете все возможные сценарии слияния
(на тот момент - конец 2007 г. - на данный момент участник SO: Якуб Наребски )

Вы могли бы быть в случай быстрой перемотки вперед, который объяснил бы, почему ваши слияния сделают все ваши коммиты мастерскими после их завершения:

2 / Перемотка вперед; нет никаких коммитов A, B, C, и мы начинаем со следующей ситуации:

   1---2---3               <-- trunk    <-- HEAD
            \
             \-a---b---c   <-- branch

2.1 / " git merge branch "

   1---2---3            /----- trunk    <-- HEAD
            \          v
             \-a---b---c   <-- branch

Быстрая перемотка вперед приводит к простому перемещению головы ствола.
Он не создает фиксацию, поэтому:

2.2 / " git merge --no-commit branch "

Как в 2.1, потому что быстрая перемотка не создавать коммит.

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


Другая причина, по которой ветки не отображаются, - это "to- do list effect », описанный на странице презентации визуализатора GitHub Network Graph (который является« графиком git », о котором вы здесь говорите)

Но вы видите каждую фиксацию только один раз. Подождите секунду.
Я обнаружил, что многие программисты настолько привыкли к централизованному SCM, что упускают из виду тот факт, что наш визуализатор графиков на самом деле показывает и соединяет разрозненные репозитории.

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

Итак, если это верно для слияний из других ветвей репо (т.е. вы больше не видите эти ветки после их слияния), это может быть верно для слияний из ваших собственных ветвей репо: после слияния, вы их больше не видите на своем графике.

Но да, так как:

  • Я не являюсь владельцем проекта.
  • Я могу получить изменения моего репо из любой из ваших веток.
5
ответ дан 9 December 2019 в 20:43
поделиться

Вы не сказали, какие команды на самом деле использовали, но я предполагаю, что вы создали свою ветку с помощью git branch , но не проверяли его нужно переехать в ветку. Вы можете сделать это за один шаг следующим образом:

git checkout master -b topic22

Это снижает вероятность того, что вы непреднамеренно совершите фиксацию в мастере.

Теперь, когда вы добавили последовательность команд, которые вы выполнили, я вижу, что вы выполнили проверку ветки.

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

0
ответ дан 9 December 2019 в 20:43
поделиться

Готов поспорить, вы ищете переключатель --no-ff, который включает git merge. По умолчанию слияние -no-ff просто обновит HEAD до вершины нового ответвления, если не произойдёт никакого промежуточного коммита.

Если вы хотите оставить коммит слияния, чтобы помочь с группировкой ваших коммитов, передайте --no-ff.

7
ответ дан 9 December 2019 в 20:43
поделиться

Я сам новичок в git и github (и ссылка все еще недоступна), но, посмотрев на ваши шаги, может быть, это потому, что вы этого не сделали ткнуть актуальную ветку на github? Мне кажется, что до сих пор это работает (я вставил команду push):

...
>> git commit -m "Authentication_feature is up" # commiting to the branch
>> git branch # just to confirm, which branch I am working on
>> git push origin authentication_feature # push the branch to github
>> git checkout master # trying to shift to master branch
...
0
ответ дан 9 December 2019 в 20:43
поделиться

Вы используете что-то вроде

git show-branch

, чтобы показать вам ветки и отметки, когда вы объединили свои ветки в master, вы больше не видите ревизий - не знаю почему.

Я не могу найти никаких объяснений по поводу поведения, но, похоже, проблем с репозиторием git нет, поскольку git log показывает все коммиты для каждой ветки.

Думаю, именно так инструмент отображает граф ветвей.

0
ответ дан 9 December 2019 в 20:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: