Что за 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!