2017-02-08 17 views
1

Я хочу полностью отказаться от определенной фиксации.Могу ли я полностью отказаться от фиксации?

Я сделал этот эксперимент:

Init репо

bash-3.2$ git init 
Initialized empty Git repository in /Users/*****/test/.git/ 

создать файл

bash-3.2$ touch readme 
bash-3.2$ ls 
readme 

совершить это создание

bash-3.2$ git add . 
bash-3.2$ git commit -m "first commit" 
[master (root-commit) b9f8e60] first commit 
1 file changed, 0 insertions(+), 0 deletions(-) 
create mode 100644 readme 

редактировать этот файл (какая-то ошибка произошла)

bash-3.2$ echo WrongMsg > readme 
bash-3.2$ cat readme 
WrongMsg 

небрежно совершить эту модификацию

bash-3.2$ git add . 
bash-3.2$ git commit -m "careless commit" 
[master 1eec681] careless commit 
1 file changed, 1 insertion(+) 

проверить журнал

bash-3.2$ git log --oneline 

даст

1eec681 careless commit 
b9f8e60 first commit 

Теперь я узнал что ошибка и хочет, чтобы исправить это

bash-3.2$ git rebase -i HEAD^ 

подскажет

pick 1eec681 careless commit 

# Rebase b9f8e60..1eec681 onto b9f8e60 (1 command) 
# 
# Commands: 
# p, pick = use commit 
# r, reword = use commit, but edit the commit message 
# e, edit = use commit, but stop for amending 
# s, squash = use commit, but meld into previous commit 
# f, fixup = like "squash", but discard this commit's log message 
# x, exec = run command (the rest of the line) using shell 
# d, drop = remove commit 
# 
# These lines can be re-ordered; they are executed from top to bottom. 
# 
# If you remove a line here THAT COMMIT WILL BE LOST. 
# 
# However, if you remove everything, the rebase will be aborted. 
# 
# Note that empty commits are commented out 

изменение pick к drop, а затем :wq сохранить, то он будет выводить

Successfully rebased and updated refs/heads/master. 

проверки журнал

bash-3.2$ git log --oneline 
b9f8e60 first commit 

исправить ошибку

bash-3.2$ echo CorrectMsg > readme 
bash-3.2$ cat readme 
CorrectMsg 

COMMIT

bash-3.2$ git add . 
bash-3.2$ git commit -m "correction" 
[master f224289] correction 
1 file changed, 1 insertion(+) 

журнал

bash-3.2$ git log --oneline 
f224289 correction 
b9f8e60 first commit 

Похоже, что падение успеха, но если я выполнить это:

bash-3.2$ git reset --hard 1eec681 
HEAD is now at 1eec681 careless commit 

bash-3.2$ git log --oneline 
1eec681 careless commit 
b9f8e60 first commit 

B ANG, история все еще находится где-то в репо, и она действительно не стирается.

Могу ли я полностью стереть эту историю?

+2

FWIW, в этом случае вы должны использовать '' git commit -amend'' вместо этого танца rebase. –

+0

Я обозначил это как дубликат, потому что дубликат имеет правильный ответ (вы должны истечь или иным образом удалить запись reflog сначала, * затем * использовать 'git gc', как в ответе Андреаса Ведербранда, или вы можете клонировать репозиторий и удалять оригинал, который еще более резкий). Тем не менее, я поддержал ответ exussum, поскольку он, как правило, наиболее применим. – torek

ответ

1

Это стирается в конце концов, но если вам действительно нужно коммят удалено вы можете запустить git gc вручную

Вам нужны запустить его с --aggressive и --prune=all действительно убедиться, оборванным коммят удаляются.

+0

Я пробовал 'git gc --aggressive --prune = all', но я все еще могу вернуться к ошибке с его SHA –

4

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

git reflog 

это покажет все истории изменения вы сделали (Move ветвь, фиксации, перебазирования и т.д.)

Они очищаются от сборщика мусора, но, честно говоря, эта функция более полезна, чем неприятность. Для небольшого количества пространства он будет использовать, я бы не стал беспокоиться об этом.

0

Тип git reflog, чтобы отображать различные сообщения о совершении и номер главы. Тип git reset --hard HEAD {Head Number здесь). Номер главы - это то место, где вы хотите, чтобы проект возвращался. Предупреждение: после того, как вы вернулись, вы не сможете вернуться к этому моменту времени.

+0

Но фиксация все равно будет там. Я могу вернуться к этому ошибочному намерению, пока я знаю SHA этого. Я хочу полностью удалить эту фиксацию. –

+0

Перейдите по этой ссылке. Это может помочь вам. https://github.com/blog/2019-how-to-undo-almost-anything-with-git – Intelligent