Я хочу полностью отказаться от определенной фиксации.Могу ли я полностью отказаться от фиксации?
Я сделал этот эксперимент:
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, история все еще находится где-то в репо, и она действительно не стирается.
Могу ли я полностью стереть эту историю?
FWIW, в этом случае вы должны использовать '' git commit -amend'' вместо этого танца rebase. –
Я обозначил это как дубликат, потому что дубликат имеет правильный ответ (вы должны истечь или иным образом удалить запись reflog сначала, * затем * использовать 'git gc', как в ответе Андреаса Ведербранда, или вы можете клонировать репозиторий и удалять оригинал, который еще более резкий). Тем не менее, я поддержал ответ exussum, поскольку он, как правило, наиболее применим. – torek