К какой ветви принадлежат сиротские коммиты? (Git, Github)
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Вопросы из категории :
- git Как я могу отменить git reset --hard HEAD ~ 1?
- git Как настроить Git голый доступный по HTTP репозиторий на IIS
- git Как мне отменить неустановленные изменения в Git?
- git Как удалить локальные (неотслеживаемые) файлы из текущего рабочего дерева Git?
- git Как клонировать все удаленные ветки в Git?
- github Как я могу удалить коммит на GitHub?
- github Доступ к оболочке git в GitX в OS X
- github Как мне вытащить свой проект из github?
- github Обновление локального репозитория с изменениями из репозитория GitHub
- git-branch Сделать существующую ветку Git отслеживающей удаленную ветку?
- git-branch Показывает, какие файлы были изменены между двумя ревизиями
- git-branch Default behavior of "git push" without a branch specified
- git-commit Как изменить существующие сообщения без фиксации?
- git-commit Как мне отправить исправленный коммит в удаленный репозиторий Git?
- git-commit Как отменить 'git add' перед коммитом?
- git-commit Удалить конфиденциальные файлы и их коммиты из истории Git