Удаление ненужных файлов из удаленного репозитория git - PullRequest
0 голосов
/ 05 января 2019

Я случайно забыл включить файл .gitignore при отправке существующего локального репозитория git в Bitbucket. В результате в удаленном хранилище появляется большое количество нежелательных файлов .aux.

Удаление их непосредственно в Bitbucket в лучшем случае займет много времени. Есть ли хороший способ сделать это локально? Или есть безопасный способ «начать все сначала», чтобы я мог включить файл .gitignore?

Кроме того, по какой-либо причине файлы .aux нигде не найдены в моих локальных файлах. Они только появились в Bitbucket после того, как я сделал свой первый толчок.

Я новичок в git, поэтому особенно ценятся явные решения.

ОБНОВЛЕНИЕ: К сожалению, мне не удалось решить проблему ни с одним из предложенных решений (за что я благодарен). В итоге я просто скопировал мои файлы и затем вернул первоначальный коммит. Затем я скопировал файлы обратно в исходный каталог. Наконец, я снова нажал их с файлом .gitignore, включенным на этот раз.

Ответы [ 4 ]

0 голосов
/ 05 января 2019

Хорошо. Ниже приведена стратегия, которой я бы следовал. Перед этим удалите .gitignore из вашего проекта. Теперь ваше рабочее дерево и область подготовки будут чистыми. И локальный, и удаленный репо будут иметь файлы .aux.

Шаг 1: Удалить последний коммит из локального репо.

git reset --soft head~1 

Это удалит последний коммит, который эффективно переместит ваши файлы .aux из области коммита в область подготовки.

Шаг 2: Сильно протолкнуть локальное репо в удаленное репозиторий битбакетов.

git push -f origin master

На этом этапе, если вы проверите репозиторий Bitbucket, вы обнаружите, что ваш предыдущий коммит удален. Таким образом, половина ущерба будет восстановлена.

Шаг 3: Переместить все файлы области подготовки в рабочую область.

git reset head

Шаг 4: Добавить .gitignore в проект.

Шаг 5: Выполните git status, чтобы проверить, видите ли вы проигнорированные файлы. Я уверен, что вы их не увидите. Однако вы увидите все нужные файлы, которые вы хотели зафиксировать ранее, но получили вместе с ненужными.

Шаг 6: Добавьте все файлы рабочего каталога в область подготовки, зафиксируйте их и отправьте в удаленное хранилище.

git add .
git commit -m "message"
git push origin master
0 голосов
/ 05 января 2019

Есть несколько способов сделать это, например ::100100

  • перейдите в новую ветку с помощью git checkout -b <newbranch> и удалите файлы локально
  • изменить коммит с помощью git commit --amend или выдвинуть его как новый коммит
  • вернитесь к своему master branch
  • тогда вы можете добавить .gitignore и зафиксировать его

Другой способ:

  • отменить коммит с помощью git revert <commitId> (это создаст новый коммит, который полностью удалит коммит)
  • добавить коммит снова (например, используя git cherry-pick <commitId>)
  • добавить файлы в .gitignore
  • совершить этот новый коммит

Третий способ использует

git rm --cached <file> что хорошо задокументировано здесь .

Дайте мне знать, если вам нужна дополнительная информация.

PS: всегда проверяйте свои коммиты, используя git status

0 голосов
/ 05 января 2019

добавить путь, который вы хотите игнорировать, к .gitignore

затем остановите отслеживание файла по указанному пути, удалив его из индекса, выполнив:

git rm --cached <file_path>

следующий коммит и push удалит файлы по указанному пути.

0 голосов
/ 05 января 2019

сначала распакуйте все существующие файлы, используя следующую команду:

git rm -r --cached

, а затем обновите свой .gitignore и подтвердите / нажмите еще раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...