Удалите невыгруженные коммиты git, но сохраните всю локальную работу

git git-commit

4043 просмотра

2 ответа

У меня есть несколько массивных файлов в моем локальном каталоге, включенных в коммит, который, как мне кажется, препятствует выполнению моего git push:

Counting objects: 194, done.
Delta compression using up to 4 threads.
Connection to bitbucket.org closed by remote host.
fatal: The remote end hung up unexpectedly
Compressing objects: 100% (190/190), done.
error: pack-objects died of signal 13
error: failed to push some refs to 'myrepo'

По крайней мере, я вполне уверен, что размер файла приводит к сбою толчка. Я просто хочу удалить запись коммита, чтобы я мог вернуться и добавить .gitignore для этих файлов, зафиксировать и снова нажать.

Git-статус дает:

On branch master
Your branch is ahead of 'origin/master' by 3 commits.
  (use "git push" to publish your local commits)
nothing to commit, working directory clean

Можно удалить коммиты, сохранив все изменения в моем рабочем каталоге? Я изо всех сил пытаюсь найти ответ, который, кажется, не включает в себя сброс моего репозитория на более ранний коммит от мастера (я хочу сохранить всю мою недавнюю локальную работу!). Любые советы будут высоко ценится.

Автор: Tom Источник Размещён: 15.10.2019 09:30

Ответы (2)


4 плюса

Решение

Бегать:

git reset origin/master 

Это перемещает базовый коммит обратно в origin / master, но оставляет рабочее дерево как есть. С этого момента вы можете добавить свой .gitignoreи сделать новый коммит.

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

Автор: Gary van der Merwe Размещён: 12.01.2016 11:58

2 плюса

Вы можете использовать git reset --soft <commit id>для этой цели. Чтобы быстро вернуть 3 коммита, вы можете использовать HEAD^3вместо идентификатора коммита.

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

От man git-reset:

--мягкий

Не затрагивает индексный файл или рабочее дерево (но сбрасывает заголовок на , как это делают все режимы). Это оставляет все ваши измененные файлы «Изменениями, которые нужно зафиксировать», как это будет указано в git status.

Автор: Ferrybig Размещён: 12.01.2016 11:58
Вопросы из категории :
32x32