Если вы хотите получить более подробные объяснения следующих команд, см. длинные ответы в следующем разделе.
Удаление удаленной ветви:
git push origin --delete # Git version 1.7.0 or newer
git push origin : # Git versions older than 1.7.0
Удаление локальной ветви:
git branch --delete
git branch -d # Shorter version
git branch -D # Force delete un-merged branches
Удаление локальной ветви удаленного слежения:
git branch --delete --remotes /
git branch -dr / # Shorter
git fetch --prune # Delete multiple obsolete tracking branches
git fetch -p # Shorter
Когда вы имеете дело с удалением ветвей как локально, так и удаленно, имейте в виду, что задействованы 3 разных ветви:
X
. X
. origin/X
, которая отслеживает удаленное отделение X
. [/g12]
Исходный плакат использовал
git branch -rd origin/bugfix
, который удалил только локальную ветвь удаленного отслеживания origin/bugfix
, а не фактическую удаленную ветвь bugfix
на origin
.
[/g13]
Чтобы удалить эту реальную удаленную ветвь, вам необходимо
git push origin --delete bugfix
[/g14]
В следующих разделах описаны дополнительные сведения, которые следует учитывать при удалении ветвей удаленного и удаленного отслеживания.
Обратите внимание, что удаление удаленной ветви X
из командной строки с помощью git push
также удалит локальную ветвь удаленного отслеживания origin/X
, поэтому нет необходимости обрезать устаревшую ветвь удаленного отслеживания с помощью git fetch --prune
или git fetch -p
, хотя она не будет "
Вы можете проверить, что ветвь удаленного отслеживания origin/X
также была удалена, выполнив следующее:
# View just remote-tracking branches
git branch --remotes
git branch -r
# View both strictly local as well as remote-tracking branches
git branch --all
git branch -a
Если вы не удалили удаленную ветвь X
из командной строки (например, выше), то ваше местное репо все равно будет содержать (теперь устаревшую) ветвь удаленного отслеживания origin/X
. Это может произойти, если вы удалили удаленную ветку непосредственно через веб-интерфейс GitHub, например.
Типичный способ удаления этих устаревших ветвей удаленного отслеживания (с версии Git 1.6.6) - просто запустить git fetch
с --prune
или короче -p
. Обратите внимание, что это удаляет все устаревшие локальные ветви удаленного отслеживания для любых удаленных филиалов, которые больше не существуют на удаленном компьютере:
git fetch origin --prune
git fetch origin -p # Shorter
Вот соответствующая цитата из примечаний к выпуску 1.6.6 (выделено мной):
«git fetch» learn
blockquote>--all
и--multiple
опции, чтобы запустить выборку из многих репозиториев и--prune
для удаления удаленных ветвей отслеживания, которые пошли несвежий. Они делают «git remote update» и «git remote prune» менее необходимым (нет плана удаления «удаленного обновления» или «удаленной обрезки», хотя).Альтернатива вышеописанному автоматическому обрезка для устаревших ветвей удаленного отслеживания
В качестве альтернативы вместо обрезания устаревших локальных ветвей удаленного отслеживания через
git fetch -p
, вы можете избежать дополнительной работы в сети , просто удалив вручную ветвь (ы) с флагами--remote
или-r
:git branch --delete --remotes origin/X git branch -dr origin/X # Shorter
См. также
Вот возможное решение:
#include <type_traits>
template<typename E>
using is_scoped_enum = std::integral_constant<
bool,
std::is_enum<E>::value && !std::is_convertible<E, int>::value>;
В решении используется различие в поведении между областью видимости и неперечисленными перечислениями, указанными в параграфе 7.2 / 9 стандарта C ++ 11:
< blockquote>Значение перечислителя или объекта неперечисленного типа перечисления преобразуется в целое число путем цельной рассылки (4.5). [...] Обратите внимание, что это неявное преобразование enum to int не предоставляется для перечисления с областью. [...]
blockquote>Вот демонстрация того, как вы его используете:
enum class E1 { };
enum E2 { };
struct X { };
int main()
{
// Will not fire
static_assert(is_scoped_enum<E1>::value, "Ouch!");
// Will fire
static_assert(is_scoped_enum<E2>::value, "Ouch!");
// Will fire
static_assert(is_scoped_enum<X>::value, "Ouch!");
}
Благодарности:
Благодаря Даниэлю Фрей за то, что мой предыдущий подход будет работать только до тех пор, пока не будет определена пользовательская перегрузка operator +
.