Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Как отменить коммит так, чтобы с проектом никаких изменений не произошло? [дубликат]

#git #git_reset #git_rebase


        
             
                
                    
                        
                            На этот вопрос уже дан ответ здесь:
                            
                        
                    
                
                        
                            Как вернуться (откатиться) к более раннему коммиту?
                                
                                    (1 ответ)
                                
                        
                                Закрыт 4 года назад.
            
                    
Пытаюсь закоммитить на GitHub большой проект по частям - по 500Мб, постепенно удаляя
определенные папки из .gitignore. Пока так делал все было хорошо.

Но случайно закоммитил сразу 1.5Гб, теперь выдает ошибку при синхронизации с GitHub.
Как можно отменить этот коммит, чтобы с моим локальным проектом никаких изменений не
произошло?

И еще вопрос. Это нормальная практика - коммитить проекты по 5Гб?
    


Ответы

Ответ 1



Вариант 1 Решение про возврат к более раннему коммиту есть здесь: Как вернуться (откатиться) к более раннему коммиту? В данном случае наиболее удобным мне представляется вариант с 4.1 При этом сохранить изменения в индекс репозитория git reset --soft 3b61b1 Хотя вы можете использовать просто reset и добавлять файлы. git reset 3b61b1 git add ... git commit -m'part 1' git add ... git commit -m'part 2' ... После чего вы разбиваете этот коммит на несколько и делаете push. Вариант 2 - разбить через rebase -i Как разделить/склеить старый комит? Rebase делаем к коммиту перед тем, который хотим разделять: git rebase -i 3b61b1^ О репозиториях в 5ГБ И еще вопрос. Это нормальная практика - коммитить проекты по 5Гб? Это возможно, но накладывает определенные ограничения. Version control system for game development with UDK? How to use Git for Unity3D source control?

Ответ 2



Скажем, что история коммитов выглядет вот так, где В - ваш HEAD, и (Ф) - состояние ваших файлов. (ф) A -> Б -> В ↑ master (1) Если хотите совсем уничтожить коммит В и больше никогда не видеть его, то можно так: git reset --hard HEAD~1 В результат, (ф) A -> Б ↑ master В больше не существует. Так как мы использовали --hard, превратились к состоянию файлов после коммита Б. (2) Если хотите отменить коммит В, но сохранить состояние файлов, то можно без --hard: git reset HEAD~1 В результат, (ф) A -> Б -> В ↑ master HEAD изменился, но состояние файлов то же самое. Ничего не потеряли. (Ответ взят с английского сайта)

Комментариев нет:

Отправить комментарий