Удалить файлы из Git commit

У меня такая же проблема. Я решил проблему со следующим кодом:

app.use('/img',express.static(path.join(__dirname, 'public/images')));
app.use('/js',express.static(path.join(__dirname, 'public/javascripts')));
app.use('/css',express.static(path.join(__dirname, 'public/stylesheets')));

Пример статического запроса:

http://pruebaexpress.lite.c9.io/js/socket.io.js

Мне нужно более простое решение. Он существует?

1371
задан random 24 August 2013 в 01:30
поделиться

13 ответов

если вы еще не отправили свои изменения в git

git reset --soft HEAD~1

Он сбросит все изменения и вернется к одному коммиту обратно

Если это последний сделанный вами коммит и вы хотите чтобы удалить файл из локального и удаленного репозитория, попробуйте это:

git rm <file>
 git commit --amend

или даже лучше:

сбросить сначала

git reset --soft HEAD~1

сбросить ненужный файл

git reset HEAD path/to/unwanted_file

совершить снова

git commit -c ORIG_HEAD  
0
ответ дан TanvirChowdhury 24 August 2013 в 01:30
поделиться

Просто хотел дополнить главный ответ, так как мне нужно было выполнить дополнительную команду:

git reset --soft HEAD^
git checkout origin/master <filepath>

Приветствия!

4
ответ дан andrepo 24 August 2013 в 01:30
поделиться

Использование git GUI может упростить удаление файла из предыдущего коммита.

Предположим, что это не общая ветка, и вы не возражаете переписать историю , а затем выполните:

git gui citool --amend

Вы можете отменить проверку файла, который был ошибочно принят и затем нажмите «Подтвердить».

enter image description here

Файл удален из коммита, но будет храниться на диске . Поэтому, если вы сняли галочку с файла после того, как по ошибке его добавили, он отобразится в вашем списке неотслеживаемых файлов (а если вы сняли галочку с файла после того, как по ошибке его изменили, он отобразится в ваших изменениях, не подготовленных для списка фиксации).

10
ответ дан JDiMatteo 24 August 2013 в 01:30
поделиться

Удаление файла с помощью rm приведет к его удалению!

Вы всегда добавляете коммит в git, а не удаляете, поэтому в этом случае верните файл в состояние, в котором он находился до первого коммита (это может быть действие удаления «rm», если файл новый), а затем повторная фиксация, и файл будет запущен.

Чтобы вернуть файл в какое-то предыдущее состояние:

    git checkout <commit_id> <path_to_file>

или вернуть его в состояние на удаленной головке:

    git checkout origin/master <path_to_file>

затем измените коммит, и вы должны найти файл исчез из списка (и не удален с вашего диска!)

35
ответ дан Bob Flannigon 24 August 2013 в 01:30
поделиться

Как показывает принятый ответ, вы можете сделать это, сбросив весь коммит. Но это довольно тяжелый подход.
Более чистый способ сделать это - сохранить коммит и просто удалить измененные файлы из него.

git reset HEAD^ -- path/to/file
git commit --amend --no-edit

git reset возьмет файл, как это было в предыдущем коммите, и поместит его в индекс. Файл в рабочем каталоге остается нетронутым.
git commit будет затем фиксировать и сдавливать индекс в текущем коммите.

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

106
ответ дан Patrick 24 August 2013 в 01:30
поделиться

ВНИМАНИЕ ! Если вы хотите только удалить файл из предыдущего коммита и сохранить его на диске , прочитайте ответ Джуззлина чуть выше.

Если это ваш последний коммит и вы хотите полностью удалить файл из вашего локального и удаленного репозитория , вы можете:

  1. удалить файл git rm <file>
  2. коммит с флагом поправки: git commit --amend

Флаг поправки говорит git снова фиксировать, но «объединить» (не в смысле слияния двух веток) этот коммит с последним совершить.

Как указано в комментариях, использование git rm здесь похоже на использование самой команды rm!

281
ответ дан railgun 24 August 2013 в 01:30
поделиться

git reset --soft HEAD^ сворачивает ваш коммит, и когда вы набираете git status, он говорит вам, что делать:

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
3
ответ дан cardamom 24 August 2013 в 01:30
поделиться
git rm --cached <file_to_remove_from_commit_<commit_id>_which_added_file>
git commit -m "removed unwanted file from git"

оставит вам локальный файл. Если вам также не нужен локальный файл, вы можете пропустить опцию --cached.

Если вся работа выполняется в вашей локальной ветке, вам нужно сохранить файл в более позднем коммите, и, как и при наличии чистой истории, я думаю, что более простой способ сделать это может быть:

git rm --cached <file_to_remove_from_commit_<commit_id>_which_added_file>
git commit --squash <commit_id>
git add <file_to_remove_from_commit_<commit_id>_which_added_file>
git commit -m "brand new file!"
git rebase --interactive <commit_id>^

и затем вы можете легко завершить ребазинг, не запоминая более сложные команды, не фиксируя сообщение или не набирая столько текста.

9
ответ дан Bryan Buckley 24 August 2013 в 01:30
поделиться

Если вы используете GitHub и еще не отправили коммит, GitHub Desktop легко решает эту проблему:

  1. Выберите Репозиторий -> Отменить самый последний коммит
  2. Отмените выбор файл, который вы по ошибке добавили. Ваше предыдущее сообщение будет уже в диалоговом окне.
  3. Нажмите кнопку подтверждения!
0
ответ дан Vadim Kotov 24 August 2013 в 01:30
поделиться

Если вам больше не нужен этот файл, вы можете сделать

git rm file
git commit --amend
git push origin branch
1
ответ дан tven 24 August 2013 в 01:30
поделиться

У меня была такая же проблема, когда у меня произошли изменения в локальной ветке, где я хотел вернуть только один файл. То, что сработало для меня, было -

( feature / target_branch ниже, где у меня есть все мои изменения, включая те, которые я хотел отменить для определенного файла)

( origin / feature / target_branch - это удаленная ветка, в которую я хочу отправить свои изменения)

( Feature / Staging - это моя временная промежуточная ветвь, в которую я буду выталкивать все свои разыскиваемые изменения, за исключением изменения в этом одном файле)

  1. Создать локальную ветку из моего origin / feature / target_branch - назвал его feature / staging

  2. Слил мою рабочую локальную ветку feature / target_branch с ] функция / сценарий ветка

  3. Извлечено функция / сценарий , затем git reset --soft ORIG_HEAD (теперь все Изменения от функции / постановки 'будут поставлены, но не зафиксированы.)

  4. Unstaged файл, который я ранее проверял в остроумии h ненужные изменения

  5. Изменена восходящая ветка для Feature / Staging на origin / feature / target_branch

  6. Передали оставшиеся поэтапные изменения и отправили вверх по течению к моему удаленному origin / feature / target_branch

2
ответ дан V-rund Puro-hit 24 August 2013 в 01:30
поделиться

Следующее действие приведет к удалению только того файла, который вы намеревались, о чем и спрашивал ОП.

git reset HEAD^ /path/to/file

Вы увидите что-то вроде следующего ...

Изменения, подлежащие фиксации: (используйте «git reset HEAD ...» для удаления)

изменено: / путь / к / файлу

Изменения не подготовлены для фиксации: (используйте «git add ...» для обновления того, что будет зафиксировано) (используйте «git checkout - ...» для отмены изменений в рабочем каталоге)

изменено: / путь / к / файлу

  • «Изменения, которые должны быть зафиксированы» - это предыдущая версия файла перед фиксацией. Это будет выглядеть как удаление, если файл никогда не существовал. Если вы передадите это изменение, будет исправление, которое вернет изменение в файл в вашей ветви.
  • «Изменения, не подготовленные для фиксации» - это изменение, которое вы зафиксировали, и текущее состояние файла

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

Когда вы будете готовы к фиксации:

git commit --amend -a

или (если у вас есть какие-то другие изменения, которые вы еще не хотите фиксировать)

git commit add /path/to/file
git commit --amend
29
ответ дан ThatsAMorais 24 August 2013 в 01:30
поделиться

Я скопировал текущие файлы в другой папке, затем избавьтесь от всех непродвинутых изменений:

git reset --hard @{u}

Тогда вещи копии назад. Фиксация, Нажатие.

0
ответ дан 3 October 2019 в 21:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: