На каких мерзавцах ты пойман?
Худший, кого я поймал, был с подмодулями git. У меня был субмодуль для проекта на github. Проект был необслуживаемым, и я хотел представить патчи, но не смог, поэтому я разобрался. Теперь подмодуль указывал на исходную библиотеку, и мне нужно было, чтобы он указывал на вилку. Поэтому я удалил старый подмодуль и заменил его подмодулем для нового проекта в том же коммите. Оказывается, это сломало все остальные репозитории. Я до сих пор не уверен, как правильно справиться с этой ситуацией, но в итоге я удалил подмодуль, заставив всех извлекать и обновлять, а затем я создал новый подмодуль и заставил всех снова извлекать и обновлять. Потребовалась лучшая часть дня, чтобы понять это.
Что другие люди сделали, чтобы случайно не испортить git-репозитории неочевидными способами, и как вы решили это?
9 ответов
Обычная косая черта при добавлении подмодуля:
Когда вы используете git add в подмодуле, убедитесь, что у вас нет косой черты.
> git add local/path
-- adds the submodule
> git add local/path/
-- adds all the files in the submodule directly into your repository, big no-no
Публикация в общедоступном репозитории, не осознавая моего git config user.name
было неверно.
Это означает, что публичное репо теперь получает имя (и электронное письмо), которое я бы вообще не публиковал. Если этот репозиторий реплицируется,... слишком поздно.
Вот почему я предпочитаю, чтобы мой user.name отображался в моей оболочке git prompt, то есть вместо этого:
MY_HOSTNAME /c/Prog/myGitProject (master)$
Я вижу это:
MY_HOSTNAME /c/Prog/myGitProject (master) VonC $
Я знаю, кто я по самой первой команде, которую я набираю в этой сессии Git bash!
Только понимая, что вы забыли запись в
.gitignore
как только у вас спички распространились по множеству веток.Забыв, что git add не добавляет того, чего там нет...
мерзавец добавить. мерзавец совершить мерзавец статус //Привет! почему он не передал мои удаления? Да, глупый я git add -u git commit --amend
- Если вы делаете
git branch list
, вы получите новую ветку под названиемlist
, но если вы делаетеgit stash
, вы получите свое рабочее место спрятанным; для заначки вам нуженlist
если вы хотите список...
Скоро, наверное...
- Работа Работа работа
- Копить изменения
- Получить последние
- Rebase
- Получайте конфликты, исправляйте их
- Забудьте "git rebase --continue"
- Шкатулка поп
- Поймите, я забыл "git rebase --continue"
- git rebase --abort
- Изменения, которые я спрятал изначально - пффффт, пропал.
Работа Работа работа...
git commit
Работа Работа работа...
git commit
Хм... время интегрироваться
git rebase -i origin/master
Какие? Конфликты? Давай начнем сначала
git reset --hard origin/master
Плакать, плакать, плакать...
Git позволяет вам стирать вашу местную историю без угрызений совести. Самая большая проблема в том, что вы - сеть безопасности.
Один из моих самых неловких моментов с git-репозиторием, хотя это больше о sed:
Я когда-то делал find ... -exec sed -i ...
операция в подкаталоге моего репозитория. Я бы проверил это без -i
во-первых, отвлекся, вернулся и сумел переключиться на верхний каталог в моем репо, прежде чем запустить его. Теперь важные файлы git доступны только для чтения, но sed -i
по умолчанию перетаскивает файл, переименовывая, а затем записывает обратно в оригинал, поэтому он отлично работает с файлом только для чтения, таким как объекты git. Замена не была обратимой, и мне пришлось восстанавливать хранилище путем клонирования и извлечения данных от кого-то, кто отслеживал мой как удаленный.
Я даже не думал, что sed будет работать с файлами, доступными только для чтения. Мораль истории: использовать sed -i -c
, который копирует файл, затем пытается перезаписать оригинал.
Работа Работа работа. Начните вносить изменения. Обратите внимание, что вы не хотите, чтобы все совершалось. Сделайте частичный коммит тщательно.
В конце концов решите, что это не готово к текущей ветке. Я хочу зафиксировать поэтапные изменения в новой временной ветке. Звучит так тривиально концептуально, верно?
Гугл как это сделать. Топ ответ говорит stash
, checkout -b newbranch
, stash pop
, Делайте это неохотно, задаваясь вопросом, почему нет более легкого пути.
Выясните, что это полностью стерло различие между вашими поэтапными и неустановленными изменениями. Спасибо, Git!
Создайте новую ветку:
git branch new-branch
Работай, комментируй, работай... Пойми, вся моя работа на мастере, а не на новой ветке.
Я должен был сделать:
git checkout -b new-branch
Почему я не могу сделать что-то вроде:
git branch -c new-branch
(с для проверки) с возможностью сделать это поведение по умолчанию???