Что за git вы попали?
Хуже всего, что я был пойман с помощью подмодулей git. У меня был подмодуль для проекта на github. Проект был не подкреплен, и я хотел представить патчи, но не мог, поэтому я разветкил. Теперь подмодуль указывал на оригинальную библиотеку, и мне нужно было это указать на развилку. Поэтому я удалил старый подмодуль и заменил его подмодулем для нового проекта в том же коммите. Оказывается, это сломало все остальные репозитории. Я все еще не уверен, какой правильный способ справиться с этой ситуацией, но я в конечном итоге удалил подмодуль, все вытягивали и обновляли, а затем я создал новый подмодуль, и все снова тянули и обновляли. Это заняло большую часть дня, чтобы понять это.
Что другие люди сделали, чтобы случайно испортить репозитории git неочевидным образом и как вы его разрешили?
Ответы
Ответ 1
Обычный трейлинг-косой чертой, когда добавляет подмодуль:
Когда вы используете git добавьте в подмодуль, убедитесь, что у вас нет косой черты.
> 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
Ответ 2
Это не gotcha, это git cha.
Ответ 3
Публикация в публичный репозиторий без реализации моего git config user.name
была неправильной.
Это означает, что публичное репо теперь получает имя (и электронную почту), я бы предпочел вообще не публиковать. Если это репо реплицируется,... слишком поздно.
Вот почему я предпочитаю, чтобы мой user.name отображался в моей командной строке git, вместо этого:
MY_HOSTNAME /c/Prog/myGitProject (master)$
Я вижу это:
MY_HOSTNAME /c/Prog/myGitProject (master) VonC $
Я знаю, кто я из первой команды, которую я набираю в этом сеансе git bash!
Ответ 4
-
Только понимая, что вы забыли запись в .gitignore
после того, как вы получили совпадения, распределенные по нагрузке ветвей.
-
Забывая, что git add не добавляет то, что не существует...
git add .
git commit
git status
//hey! why didn't it commit my deletes?, Oh yeah, silly me
git add -u
git commit --amend
- Если вы выполните
git branch list
, вы получите новую ветвь с именем list
, но если вы выполните git stash
, вы получите свое рабочее пространство; для stash, вам нужен list
, если вы хотите список...
Скорее, возможно...
Ответ 5
- Работа по работе.
- Изменения строчки
- Получить последние
- Rebase
- Получить конфликты, исправить их
- Забудьте "git rebase -continue"
- Pop stash
- Поймите, я забыл "git rebase -continue"
- git rebase --abort
- Изменения, которые я отложил изначально - pfffft, ушел.
Ответ 6
Работа по работе...
git commit
Работа по работе...
git commit
Hm... время для интеграции
git rebase -i origin/master
Что? Конфликты? Позвольте снова начать
git reset --hard origin/master
Крик крик...
Git позволяет стереть вашу местную историю без раскаяния. Самая большая проблема заключается в том, что вы являетесь защитной сетью.
Ответ 7
Один из моих самых смущающих моментов с репозиторием git, хотя он больше о sed:
Я когда-то делал операцию find ... -exec sed -i ...
в подкаталоге моего репозитория. Я сначала протестировал его без -i
, отвлекся, вернулся и сумел переключиться на верхний каталог в своем репо, прежде чем запускать его. Теперь git важные файлы доступны только для чтения, но sed -i
по умолчанию перетасовывает файл, переименовывая его, а затем записывает обратно в исходное, поэтому он отлично работает в файле только для чтения, например в объектах git. Подстановка не была обратимой, и мне пришлось восстановить репозиторий путем клонирования и получения от кого-то, кто отслеживал мой как удаленный.
Я даже не думал, что sed будет работать с файлами только для чтения. Мораль истории: используйте sed -i -c
, который копирует файл, затем пытается перезаписать оригинал.
Ответ 8
Создайте новую ветку:
git branch new-branch
Работайте, совершайте, работайте... Реализуйте всю мою работу на хозяине, а не на новой ветке.
Я должен был сделать:
git checkout -b new-branch
Почему я не могу сделать что-то вроде:
git branch -c new-branch
(c для проверки) с возможностью сделать это по умолчанию.
Ответ 9
Работа по работе. Начните с изменения. Заметьте, вы не хотите, чтобы все было совершено. Начните с частичной фиксации.
В конце концов решите, что это не готово для текущей ветки. Я хочу совершить поэтапные изменения в новую временную ветку. Звучит так тривиально концептуально, верно?
Google, как это сделать. Верхний ответ говорит stash
, checkout -b newbranch
, stash pop
. Делайте это безрассудно, задаваясь вопросом, почему нет более простого способа.
Найдите, что это полностью уничтожило различие между вашими постами и неустановленными изменениями. Спасибо, Git!