Я никогда не разбирался в git, и я работаю только над программированием время от времени, поэтому я забываю статус своих проектов. На данный момент я не понимаю, что git говорит мне о старых ветках.
git branch -a
говорит:
dashboard
* master
php7
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/php7
Итак, он говорит, что у меня есть две ветки, кроме master: dashboard
и php7
. Я хорошо помню php7
— это был большой кусок работы с множеством коммитов. Я не помню dashboard
, но имя говорит мне, к какому файлу это относится.
git branch --merged
говорит:
dashboard
* master
php7
Так что, видимо, оба объединены. Но php7
известен удаленно, а dashboard
- нет. Я не помню, какие команды git я сделал, чтобы добраться до этого момента.
Когда я смотрю на журнал в PHPStorm (или с git log --graph
), эти два не выглядят так, как я ожидал бы от ветки - на ней нет отведенной строки с коммитами. Вот самый последний раздел журнала:
Загадки (по крайней мере для меня):
- Все коммиты, которые я делал в ветке
php7
, находятся на той же оранжевой линии, что иmaster
. Если я объединил, а затем удалил ветку (логично), почему она вообще все еще указана как ветка? - Почему в конце ветки
php7
есть дополнительная метка «происхождение»? Я бы подумал, что недавние нажатия заставят удаленный сервер выглядеть так же, как локальный, только с одной меткой «происхождение» в последнем коммите. Конечно, удаленный не считаетphp7
еще не объединенным - это было бы ужасно, поскольку этот код имеет решающее значение. dashboard
удаленно вообще не известен (https://github.com/OsakaWebbie/kizunadb) - как это могло быть?
С другой стороны, ранее в логе была очень очевидная ветка, которая имела два коммита, а затем была слита, которой нет в списке веток: Я был бы рад удаляю (старые ветки не храню из-за ностальгии), но git branch -d texlabels
говорит: error: branch 'texlabels' not found.
Самое ветвистое на вид в логе не ветка? У меня болит голова.
Я уверен, что вы, гуру git, сразу поймете, что все это значит и как это убрать — жду ясности.
Обновлять:
Спасибо Ката за исчерпывающий ответ (весьма вероятно, что он будет принят). Но у меня есть несколько дополнительных вопросов, которые было бы трудно прочитать в крошечном комментарии (я бы хотел, чтобы комментарии были длиннее и имели больше форматирования), так что потерпите меня немного дольше. Я думаю, на них можно ответить либо комментарием, либо добавлением Ката к своему ответу - все, что работает.
Потому что не уверен, что в прошлом
php7
был объединен с мастером.
Если нет уверенности, что php7
был объединен, почему он указан в --merged
? (Меня беспокоит мысль о том, что git «неуверен» в чем-либо...) Я понятия не имею, как переместить голову ветки позже, так что этот сценарий маловероятен. Однако было время, когда я сделал что-то локально, из-за чего Github отказался от отправки (я думаю, что мог изменить файлы в уже отправленную фиксацию) — кто-то еще помог мне просмотреть это, и в итоге я сделал push -f
(я' м единственный застройщик). Возможно, это привело к тому, что указатель сместился...
В любом случае, я знаю, что код php7
является частью моей текущей кодовой базы, потому что теперь он успешно работает на PHP7. И я признаю, что несколько коммитов были сделаны в этой ветке. На самом деле, возможно, что все коммиты с момента создания php7
до момента слияния (46 коммитов) были сделаны в этой ветке (т. е. без возврата к мастеру для исправления ошибок). Объясняет ли это, почему в DAG нет дополнительной строки рядом с главной строкой?
Если это так, то, возможно, texlabels
— единственная ветвь, которую я когда-либо прервал, чтобы исправить ошибку на главном сервере, поскольку это единственная дополнительная строка в DAG. Кроме того, ни в одной другой ветке нет записи «Ветка слияния« такая-то »» - это потому, что без каких-либо основных коммитов слиянию не нужно изменять какой-либо контент (просто перемещать указатели)?
Потому что
dashboard
был создан локально и никогда не отправлялся на удаленку.
О, я не понимал, что базовый push не включает информацию о ветке. Судя по всему, Github знает о php7
, потому что я, несомненно, делал пуши, пока он проверялся. (Это правильно?)
Я также теперь узнал о тегах и создал тег в тот момент, когда развернул свой проект на новом сервере с PHP7 и другими отличиями. Я был бы рад, если бы больше не было веток php7
или dashboard
, пока моя текущая кодовая база остается моей текущей кодовой базой. Но если вы говорите, что существует некоторая неопределенность в отношении их статуса слияния, безопасно ли их удалять? (Удаление вещей звучит пугающе, но если это просто указатель...)
Обновление №2:
После того, как Ката упомянул, что без --all
я мог бы не видеть всего, я сделал различие между этим флагом и без него. Я обнаружил, что в самом начале моей работы php7
повторялись первые четыре коммита, сначала на "разветвленной" ветке (видно только в --all
), а затем на основной линии со всем остальным. Вот соответствующий фрагмент из git log --graph --decorate --all --oneline
:
* 3b1c25a Removal of .html files (won't work with the new server config) and $client in db connect file
* dccc3f3 minor edits
* 20a1aab remove .idea files from repo
* 629d891 Second day of cleanup for PHP7: various things, hacking away at errors one at a time (note: I
* a669fa0 First day of cleanup for PHP7: * mysql_ to mysqli_ (major functions, anyway) * convert my
| * 51738d1 (refs/original/refs/heads/php7) minor edits
| * f1aa0f9 remove .idea files from repo
| * 38aef9b (refs/original/refs/remotes/origin/php7) Second day of cleanup for PHP7: various things, ha
| * cfcaa51 First day of cleanup for PHP7: * mysql_ to mysqli_ (major functions, anyway) * convert
|/
* 294ef21 Feature: batch category delete
Я предполагаю, что странность была каким-то образом вызвана тем, что я случайно использовал командную строку на своей виртуальной машине, чтобы выполнить два из четырех («удалить .idea ...» и «незначительные правки») вместо OsakaWebbie, как остальные. из них. (Пользователь не отображается в --oneline
, но вы можете увидеть это на Github.) Но независимо от того, как это произошло, я предполагаю, что первый набор (от cfcaa51 до 51738d1) исчезнет, когда я удалю ветку, но поскольку они повторяются (и я знаю, что моя текущая кодовая база отражает изменения в этих коммитах), все должно быть в порядке, верно?
rm -Rf .git/refs/original
? Просто подтверждаю, так как это кажется радикальным, и я не понимаю его достаточно хорошо, чтобы предвидеть побочные эффекты. Я попытался окунуться, выполнив толькоgit gc
, но это не удалило четыре коммита. 08.11.2018git gc
не работает - хочет удалить файлы, но не может. Всегда есть одно:rm: cannot remove ‘/var/www/kizunadb/public/.git/objects/pack/old-pack-[somenumber].pack’: Operation not permitted
, а иногда и сотни предупреждений типа:unable to unlink .git/objects/01/[somenumber]: Operation not permitted
. Это виртуальная машина - я могу удалить файлы на хосте Windows (я пробовал только старые пакеты - я боюсь делать другие, на случай, если они понадобятся gc до отвязки), но не на гость CentOS, даже как root. Гугление никаких подсказок не дало. 08.11.2018