2016-10-24 2 views
0

Как удалить последние 3 коммита?, вероятно, много примеров, но я думаю, что я очень конкретно здесь, с тем, что хочу.Как удалить последние 3 коммита?

Так, например, я сделал git add . и git commit -m "message" и git push -u origin master для всех этих.

Я следующий вывод из всех моих фиксаций (с 21 является последней фиксация)

$git log --pretty=oneline 
[[33mab18ba3884244e99d99122e788062b2aaf6ba372[[m commit-21 
[[33m9625c19e03a747457162d7c0274d75b154a0b926[[m commit-20 
[[33m8668df12af9eee540cc29f9deb6d31d873bb8f24[[m commit-19 
[[33m8315cd7962c902d39160fcf2fd018f249e7cf744[[m commit-18 
[[33m3bcecc602a70fb60324777831d51c81b6f9ccaa7[[m commit-17 
[[33m0485a39c37e72eabb4003e07a6b8cbae7a0d4e25[[m commit-16 
[[33m9d3b04a7bcbb82be8b6b7882511f8133745c93b6[[m commit-15 
[[33m22c259497571390fdd1461f0dd6b77244851984b[[m commit-14 
[[33m39fb965fc245be55bb86491b5871dd2def08fdf4[[m commit-13 
[[33m299f6bb77e922d707c9981a48d4d75f57b724719[[m commit-12 
[[33me7285377d7afc08c7a5fb0ca44154d2de7e1d275[[m commit-11 
[[33mb3360786ef13044d13b6e58c2239cce5595a1abf[[m commit-10 
[[33m9af4c134e0d239d1c34fc6bb6087f0473c187fd5[[m commit-9 
[[33md55ac3370f506a4bbf8a4690b9285e5de9c6a671[[m commit-8 
[[33me50ef5f58b18d05c36343114804d8be180d26bcb[[m commit-7 
[[33m962e4a8de7649e06df29f9058a600f8318caf023[[m commit-6 
[[33m37f5363f62a3f973fe6e0d516e47b4324186d998[[m commit-5 
[[33m0033e32339e4dc0cce8bd208d43b18a4e9ab43d9[[m commit-4 
[[33m345239c740a408826f1df0dc5592d5d6b355f019[[m commit-3 
[[33m8c85bf2592f52302ff389a5b6af4127fbe04c73b[[m commit-2 
[[33ma4077b6c2b6a491af72ae3afc3b5c6260090b605[[m commit-1 

То, что я хочу сделать, это эффективно удалить последние 3 фиксаций и в конечном итоге с этим: (Так был как мерзавец совершить 19, 20 и 21 никогда не случалось)

$git log --pretty=oneline 
[[33m8315cd7962c902d39160fcf2fd018f249e7cf744[[m commit-18 
[[33m3bcecc602a70fb60324777831d51c81b6f9ccaa7[[m commit-17 
[[33m0485a39c37e72eabb4003e07a6b8cbae7a0d4e25[[m commit-16 
[[33m9d3b04a7bcbb82be8b6b7882511f8133745c93b6[[m commit-15 
[[33m22c259497571390fdd1461f0dd6b77244851984b[[m commit-14 
[[33m39fb965fc245be55bb86491b5871dd2def08fdf4[[m commit-13 
[[33m299f6bb77e922d707c9981a48d4d75f57b724719[[m commit-12 
[[33me7285377d7afc08c7a5fb0ca44154d2de7e1d275[[m commit-11 
[[33mb3360786ef13044d13b6e58c2239cce5595a1abf[[m commit-10 
[[33m9af4c134e0d239d1c34fc6bb6087f0473c187fd5[[m commit-9 
[[33md55ac3370f506a4bbf8a4690b9285e5de9c6a671[[m commit-8 
[[33me50ef5f58b18d05c36343114804d8be180d26bcb[[m commit-7 
[[33m962e4a8de7649e06df29f9058a600f8318caf023[[m commit-6 
[[33m37f5363f62a3f973fe6e0d516e47b4324186d998[[m commit-5 
[[33m0033e32339e4dc0cce8bd208d43b18a4e9ab43d9[[m commit-4 
[[33m345239c740a408826f1df0dc5592d5d6b355f019[[m commit-3 
[[33m8c85bf2592f52302ff389a5b6af4127fbe04c73b[[m commit-2 
[[33ma4077b6c2b6a491af72ae3afc3b5c6260090b605[[m commit-1 

Примечание: Я посмотрел на это и не тихо получить то, что я хочу. Я пробовал git revert (это совет, если я опубликовал то, что я предполагаю, это то же самое, что и git push -u origin master) git rebasegit reset
Я не занимаюсь своим удаленным на данном этапе. Я хочу, чтобы мое местное репо вернуло пару репозиториев.

+4

Возможный дубликат (HTTP [Как отменить последний коммит (s) в Git?]: // StackOverflow.com/questions/927358/how-to-undo-last-commits-in-git) –

ответ

5

использование может использовать git reset для этого

git reset --hard HEAD~3 

git push --force origin master 

где HEAD~3 средства вернуться 3 совершает

Вы также можете использовать коммит номер вместо 3 совершает, так что вы знаете, где вы возвращаетесь вовремя, например

git reset --hard 8315cd7962c902d39160fcf2fd018f249e7cf744 

EDIT:

При переписывании истории, предпочитают использовать

git push origin +master 

Чтобы быть безопасным, если вы когда-либо толкая более одной ветви. Вы можете прочитать больше на Git Force push syntax, "-f" versus "+branch"

(kudor на Josef Kufner комментарий, указывая его)

EDIT 2:

Я просто заметил, что ваш журнал печатает цвета как коды, так

git reset -- hard 33m8315cd7962c902d39160fcf2fd018f249e7cf744 

не будут работать, [[33m и [[m - это цветовые коды! Так что ваш номер зафиксированной на самом деле 8315cd7962c902d39160fcf2fd018f249e7cf744

Если вы

git reset --hard 8315cd7962c902d39160fcf2fd018f249e7cf744 

он должен работать.

(Fixed код коммит в предыдущих примерах, а)

+1

Лучше использовать 'git push origin + master', потому что когда/если вы нажимаете несколько ветвей, вы не будете перезаписывать некоторые случайно , –

+1

@JosefKufner хороший улов, обновит мой ответ. Благодарю. –

+0

tks попробовал этот 'git reset --hard 33m8315cd7962c902d39160fcf2fd018f249e7cf744' и этот' git reset - hard 33m8315cd7962c902d39160fcf2fd018f249e7cf744' и не работал. Но этот 'git reset --hard HEAD ~ 3' и этот' git push origin + master' действительно сработал. – HattrickNZ

 Смежные вопросы

  • Нет связанных вопросов^_^