К какой ветви принадлежат сиротские коммиты? (Git, Github)

git github git-branch git-commit

96 просмотра

1 ответ

У меня в репозитории Github есть коммиты- сироты . Их нет в какой-либо ветке или в моем локальном репо, и я могу их увидеть, только если выберу конкретную проблему в списке связанных коммитов.

Можно ли как-то объединить эти коммиты в другую ветку по моему выбору?

введите описание изображения здесь

Автор: Felipe Peña Источник Размещён: 15.10.2019 12:34

Ответы (1)


0 плюса

К какой ветви принадлежат сиротские коммиты? (Git, Github)

Что ж, по определению осиротевшие коммиты не принадлежат ни к какой ветви ( кстати, немного неправильно говорить это, лучше сказать, «какие коммиты с ветвями имеют определенный коммит в их иерархической цепочке?» ), Поэтому я предполагаю реальный вопрос является...

Можно ли как-то объединить эти коммиты в другую ветку по моему выбору?

Конечно, это так. Вы можете использовать git cherry-pickкоманду, цитируя документы , «применить изменения, внесенные некоторыми существующими коммитами» . Вот простой пример того, как его можно использовать:

Сначала репозиторий инициализируется:

> git init
> echo 1 > first.txt
> git add . && git commit -m "First commit"
[master (root-commit) a8871cd] First commit
 1 file changed, 1 insertion(+)
 create mode 100644 first.txt

Затем создаются бесхозные коммиты (самый простой способ - создать ветку, немного продвинуть ее, затем удалить):

> git checkout -b branch-to-remove
Switched to a new branch 'branch-to-remove'

> echo 1 > cherry.txt
> git add . && git commit -m "Cherry commit 1"
[branch-to-remove 7cd90f8] Cherry commit 1
1 file changed, 1 insertion(+)
create mode 100644 cherry.txt

> echo 2 >> first.txt
> git add . && git commit -m "Cherry commit 2"
[branch-to-remove 8289dee] Cherry commit 2
1 file changed, 1 insertion(+)

> git checkout master
> git branch -D branch-to-remove
Deleted branch branch-to-remove (was 8289dee).

Таким образом, ветка исчезла, но два коммита - 7cd90f8 и 8289dee - все еще там. Теперь мастер ветка работает над:

> echo 3 >> first.txt
> git add . && git commit -m "Second commit"
[master e0c199e] Second commit
1 file changed, 1 insertion(+)

Теперь у вас в руках какая-то ситуация: где-то применены некоторые изменения, нам нужно, чтобы эти изменения были применены к текущей ветке. Это просто сделать с простыми неконфликтующими изменениями, такими как внесенные в Cherry commit 1:

 > git cherry-pick 7cd90f8
[master 864dcbe] Cherry commit 1
 1 file changed, 1 insertion(+)
 create mode 100644 cherry.txt

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

> git cherry-pick 8289
error: could not apply 8289dee... Cherry commit 2
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'

На самом деле, ничего страшного: поскольку оба коммита - HEAD и выбранный - затронули один и тот же файл, возникает классический конфликт. Легко проверить, легко исправить; только не забудьте git addвсе полученные файлы и git commitих позже.

Обратите внимание, что коммиты, которые являются результатом cherry-pick, имеют только одного родителя (в этом случае они аналогичны перебазированным коммитам).

Автор: raina77ow Размещён: 14.01.2016 01:43
Вопросы из категории :
32x32