Вот команды, которые я использовал из основной ветки
git branch experiment
git checkout experiment
Затем я внес некоторые изменения в свои файлы, зафиксировал их и перенес новую ветку в GitHub.
git commit . -m 'changed files'
git push -u origin experiment
Позже я решил объединить свою экспериментальную ветку с главной веткой.
git checkout master
git merge experiment
Наконец я отправил изменения в GitHub.
git push -u origin master
Все прошло хорошо, пока я не попытался удалить ветку эксперимента, используя
git branch -d experiment
Я получил сообщение об ошибке, error: The branch 'experiment' is not fully merged.
я немного новичок в Git, и я не знаю, насколько больше я мог бы объединить две ветви. Что мне здесь не хватает?
git
git-branch
mellowsoon
источник
источник
git commit --amend
squash
: stackoverflow.com/q/41946475/109941Ответы:
Примечание Формулировка изменилась в ответ на комментарии. Спасибо @slekse
Это не ошибка, это предупреждение. Это означает, что ветвь, которую вы собираетесь удалить, содержит коммиты, которые недоступны ни из одного из: его восходящей ветки или HEAD (текущая проверенная ревизия). Другими словами, когда вы можете потерять коммиты.
На практике это означает, что вы, вероятно, изменили, изменили или отфильтровали коммиты, и они не кажутся идентичными
Поэтому вы можете избежать предупреждения , проверив ветку, которая содержит коммиты, о которых вы не ссылаетесь , удалив эту другую ветку.
Вы хотите убедиться, что вы на самом деле не пропускаете какие-либо важные коммиты:
Это даст вам список всех не разделенных между ветвями. Если вам любопытно, возможно, есть разница без,
--cherry-pick
и эта разница вполне может быть причиной для предупреждения, которое вы получите:Really они действительно только мусор через некоторое время, по умолчанию. Также
git-branch
команда не проверяет дерево ревизий всех ветвей . Предупреждение здесь, чтобы избежать очевидных ошибок.² (Я предпочитаю вместо этого просто форсировать удаление, но вам может потребоваться дополнительная уверенность).
источник
Как указал Дрю Тейлор, удаление ветки с помощью -d учитывает только текущий HEAD при определении, является ли ветвь полностью объединенной. Он будет жаловаться , даже если отрасль будет объединена с какой - либо другой отрасли. Сообщение об ошибке определенно может быть более ясным в этом отношении ... Вы можете либо проверить объединенную ветвь перед удалением, либо просто использовать git branch -D. Заглавная -D полностью отменяет проверку.
источник
origin/master
?) Я полагаю, чтоorigin/master
сначала проверить не слишком обременительно, но это похоже на странный поток - почему мне нужно проверитьorigin/master
локально только для того, чтобы вы убедились, что мои изменения там объединены?Я попытался ответить Сехе, и это не сработало.
Чтобы найти коммиты, которые не были объединены, просто используйте:
источник
Это случилось со мной сегодня, когда я сливал свою самую первую ветвь функций обратно в master. Как некоторые говорили в потоке где-то в SO, трюк снова переключался на master, прежде чем пытаться удалить ветку. Вернувшись в master, git был счастлив удалить ветку без всяких предупреждений.
источник
Git предупреждает, что вы можете потерять историю, удалив эту ветку. Даже при том, что это фактически не удаляло бы любые коммиты сразу, некоторые или все коммиты в ветви стали бы недоступными, если они также не являются частью какой-либо другой ветви.
Для того
experiment
чтобы ветвь «полностью слилась» с другой ветвью, ее коммит должен быть предком подсказки другой ветки, делая коммиты вexperiment
подмножестве другой ветки. Это делает его безопасным для удаленияexperiment
, поскольку все его коммиты останутся частью истории репозитория через другую ветку. Он должен быть «полностью» объединен, поскольку он мог быть объединен уже несколько раз, но теперь с момента последнего объединения добавлены коммиты, которые не содержатся в другой ветви.Git не проверяет все остальные ветки в хранилище; только два:
«Верхняя ветка» для
experiment
, как в вашем случае, вероятноorigin/experiment
. Еслиexperiment
он полностью объединен с текущей веткой, то Git удаляет его без жалоб. Если это не так, но он полностью объединен с вышестоящей веткой, то Git выдает предупреждение, похожее на:Где
xxxxxxxx
указывает идентификатор коммита. Полное слияние с вышестоящим потоком означает, что коммитыexperiment
были перенесены в исходный репозиторий, так что даже если вы потеряете их здесь, они, по крайней мере, могут быть сохранены в другом месте.Поскольку Git не проверяет другие ветви, может быть безопасно удалить ветку, потому что вы знаете, что она полностью объединена с другой; Вы можете сделать это с помощью указанной
-D
опции или сначала переключиться на эту ветку и позволить Git подтвердить полностью объединенный статус для вас.источник
чтобы увидеть изменения, которые не объединены, я сделал это:
Примечание: это показывает изменения в
master
которых нетexperiment
.Не забудьте:
Когда вы закончите, смотрю.
источник
man git-reset
и команд git reset достаточно для восстановления после проблем с состоянием.Самое простое решение с объяснением (двойная проверка решения) (сталкивался с проблемой раньше)
Проблема в следующем:
1- я не могу удалить ветку
2. Терминал продолжает отображать предупреждающее сообщение о том, что есть некоторые коммиты, которые еще не утверждены
3- зная, что я проверил мастер и филиал, и они идентичны (на сегодняшний день)
решение:
Объяснение:
когда ваша ветвь подключена к восходящей удаленной ветке (на Github, bitbucket и т. д.), вам нужно объединить (протолкнуть) ее в мастер, и вам нужно перенести новые изменения (коммиты) в удаленное репо (Github, bitbucket или что угодно) из ветки,
Что я сделал в своем коде, так это то, что я переключился на master, затем слил в него ветку (чтобы убедиться, что они идентичны на вашей локальной машине), затем я снова переключился на ветку и отправил обновления или изменения в удаленный онлайн репо с помощью «git push».
после этого я снова переключился на мастер и попытался удалить ветку, и проблема (предупреждающее сообщение) исчезла, и ветка удалась успешно
источник
Вы можете просто выяснить:
--cherry
вариант является синонимом--right-only --cherry-mark --no-merges
сказала страница руководства git-log
FYI.
--cherry-pick
пропускает эквивалентные коммиты, но--cherry-marks
не делает. Полезно найти ребаз и форсировать обновленные изменения между открытой веткой и совместной публичной веткойисточник
У меня не было ветки upstream в моем локальном git. Я создал локальную ветку от master, git checkout -b mybranch. Я создал ветку с графическим интерфейсом bitbucket в git вверх по течению и перенес свою локальную ветвь (mybranch) в эту ветку вверх по течению. После того, как я сделал git fetch для своего локального git, чтобы получить ветку upstream, я мог сделать git branch -d mybranch.
источник
Я верю, что флаг
--force
- это то, что вы действительно ищете. Просто используйте,git branch -d --force <branch_name>
чтобы принудительно удалить ветку.источник