Искам да изтрия клон както локално, така и отдалечено.
$ git branch -d remotes/origin/bugfix
error: branch 'remotes/origin/bugfix' not found.
$ git branch -d origin/bugfix
error: branch 'origin/bugfix' not found.
$ git branch -rd origin/bugfix
Deleted remote branch origin/bugfix (was 2a14ef7).
$ git push
Everything up-to-date
$ git pull
From github.com:gituser/gitproject
* [new branch] bugfix -> origin/bugfix
Already up-to-date.
Какво трябва да направя по различен начин, за да изтриете успешно
remotes/origin/bugfix
както локално, така и отдалечено?
$ git push -d <remote_name> <branch_name>
$ git branch -d <branch_name>
Обърнете внимание, че в повечето случаи отдалеченото име е оригинал
.
За да изтриете локалния клон, използвайте едно от следните действия:
$ git branch -d branch_name
$ git branch -D branch_name
Забележка: Опцията -d
е псевдоним на --delete
, която изтрива клона, само ако той вече е бил напълно слят в по-горния клон. Можете също така да използвате -D
, която е псевдоним на --delete --force
, която изтрива клона "независимо от състоянието му на сливане." [Източник: man git-branch
]
От Git v1.7.0 можете да изтриете отдалечен клон, като използвате
$ git push <remote_name> --delete <branch_name>
което може да е по-лесно за запомняне от
$ git push <remote_name> :<branch_name>
който беше добавен в Git v1.5.0 "за изтриване на отдалечен клон или таг."
От [Git v2.8.0][git-2.8.0] можете да използвате и git push
с опцията -d
като псевдоним на --delete
.
Следователно версията на Git, която сте инсталирали, ще определи дали трябва да използвате по-лесния или по-трудния синтаксис.
От глава 3 на Pro Git от Скот Чакон:
Изтриване на отдалечени клонове
Да предположим, че сте приключили с отдалечен клон - да речем, че вие и вашите сътрудници сте приключили с дадена функция и сте я сляли в главния клон на отдалечения клон (или в който и да е клон на вашата стабилна кодова линия). Можете да изтриете отдалечен клон, като използвате доста сложния синтаксис
git push [remotename] :[branch]
. Ако искате да изтриете вашия клон server-fix от сървъра, изпълнявате следното:$ git push origin :serverfix За да [email protected]:schacon/simplegit.git
- [deleted] serverfix
Boom. Вече няма клонове на вашия сървър. Може би ще искате да запишете тази страница, защото ще ви е необходима тази команда и вероятно ще забравите синтаксиса. Начин да запомните тази команда е като си припомните синтаксиса
git push [remotename] [localbranch]:[remotebranch]
, който разгледахме малко по-рано. Ако пропуснете частта[localbranch]
, тогава на практика казвате: "Не вземам нищо от моята страна и го правя[remotebranch]
."
Издадох git push origin: bugfix
и всичко заработи прекрасно. Скот Чакон беше прав - ще искам да кучешко ухо на тази страница (или практически кучешко ухо, като отговоря на това в Stack Overflow).
[git-2.8.0]: https://github.com/git/git/blob/master/Documentation/RelNotes/2.8.0.txt
След това трябва да изпълните това на други машини
# Fetch changes from all remotes and locally delete
# remote deleted branches/tags etc
# --prune will do the job :-;
git fetch --all --prune
за да разпространите промените.
Можете също така да използвате следното, за да изтриете отдалечения клон
git push --delete origin serverfix
Което прави същото нещо като
git push origin :serverfix
но може би е по-лесно за запомняне.
В допълнение към другите отговори, често използвам инструмента git_remote_branch. Това е допълнителна инсталация, но ви дава удобен начин за взаимодействие с отдалечени клонове. В този случай, за да изтриете:
grb delete branch
Открих, че доста често използвам и командите publish
и track
.