Git: Видалення зафіксованого файлу після натискання


112

Чи є можливість повернути скоєний файл у Git? Я натиснув коміт на GitHub, а потім зрозумів, що є файл, який я не хотів, щоб його штовхали (я не закінчив зміни).


1
Ви хочете повністю видалити файл з GitHub після натискання? В іншому випадку ви просто: git rm <файл>, git push.
rdrmntn


Відповіді:


153

оновлення: додано безпечніший метод

кращий спосіб:

  1. перевірити попередній (незмінний) стан вашого файлу; зверніть увагу на подвійну риску

    git checkout HEAD^ -- /path/to/file
    
  2. фіксуємо це:

    git commit -am "revert changes on this file, not finished with it yet"
    
  3. натисніть, не потрібно сили:

    git push
    
  4. поверніться до своєї незавершеної роботи, знову виконайте (3 рази стрілкою вгору):

    git checkout HEAD^ -- /path/to/file
    

фактично `` не поспішаючи '':

Змінити останній коміт HEAD сховища, затуманивши вашу випадково штовхнуту роботу, при цьому потенційно зіткнувшись із конфліктом з вашим колегою, який, можливо, вже її витягнув, і який відросте сивим волоссям і втратить багато часу, намагаючись примирити свого керівника місцевого відділення з центральним:

Щоб видалити зміну файлу з останнього коміту:

  1. щоб повернути файл до стану перед останнім комітом, виконайте:

    git checkout HEAD^ /path/to/file
    
  2. щоб оновити останній коміт з поверненим файлом, виконайте:

    git commit --amend
    
  3. щоб підштовхнути оновлений коміт до репо, зробіть:

    git push -f
    

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


1
Якщо ви не є єдиним розробником проекту, вам справді не слід використовувати git push -f. Це створює більше проблем, ніж це варте. Просто видаліть файл, а потім зробіть новий коміт.
richardm

1
@ user553086 не міг більше погодитися. Краще зараз?
xor

Чи можливо це зробити з комітами, що віддалилися в історію? Наприклад, чи можу я це зробити git checkout HEAD~2 /path/to/file? Редагувати: Схоже, те, що я хотів у моєму випадку, було простоgit rm /path/to/file
starscream_disco_party

1
Ти щойно врятував мене 4 години, брат!
Тосін Онікуте

56

Якщо ви хочете видалити файл із віддаленого репозиторію, спочатку видаліть його зі свого проекту за допомогою опції --cache, а потім натисніть:

git rm --cache /path/to/file
git commit -am "Remove file"
git push

(Це працює, навіть якщо файл був доданий у віддалене репо кілька комітів тому) Не забудьте додати до .gitignore розширення файлів, які ви не хочете натискати.


2
Це видаляє файли з цього коміту вперед, але файли все ще видно в старих комітах.
Кен

30

Ви можете повернути лише один файл до вказаної версії.

Спочатку ви можете перевірити, в яких комітах файл було змінено.

git log path/to/file.txt

Потім ви можете перевірити файл із номером редакції.

git checkout 3cdc61015724f9965575ba954c8cd4232c8b42e4 /path/to/file.txt

Після цього ви можете зробити коміт і натиснути його ще раз.


7

Скиньте файл у правильному стані, зафіксуйте та натисніть ще раз.

Якщо ви впевнені, що ще ніхто не завантажував ваші зміни, ви можете скористатися --amendкоммітуванням, щоб змінити попередній коміт (тобто переписати історію), а потім натиснути. Думаю, вам доведеться використовувати -fопцію під час натискання, щоб змусити поштовх.


4
  1. Отримайте хеш-код останнього коміту.

    • git log
  2. Скасувати коміт
    • git revert <hash_code_from_git_log>
  3. Натисніть на зміни
    • git push

перевірити в GHR. Ви можете отримати все, що потрібно, сподіваюся, що це корисно

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.