Теперь, когда вы подтвердили, что нам разрешено делать новые коммиты для достижения желаемого эффекта, самый простой способ сделать это: сделать то, что написано на Как вставить коммит между двумя произвольными коммитами в прошлое? для вставки изменения изменений после проблемной фиксации. Затем интерактивная перебазировка в квадрат sh вставленного коммита в проблемный коммит.
Я покажу:
humlet:gittest matt$ git init
humlet:gittest matt$ echo test > dummy.txt
humlet:gittest matt$ git add .
humlet:gittest matt$ git commit -m "start"
humlet:gittest matt$ echo crucial > crucial.txt
humlet:gittest matt$ git add .
humlet:gittest matt$ git commit -m "created crucial file"
humlet:gittest matt$ echo test2 > dummy.txt
humlet:gittest matt$ git commit -am "changed dummy"
humlet:gittest matt$ echo test3 > dummy.txt
humlet:gittest matt$ git commit -am "changed dummy again"
git log
показывает, что коммиты
changed dummy again
changed dummy
created crucial file
start
Хорошо, поэтому цель состоит в том, чтобы изменить то, что находится в vital.txt , и поместить этот коммит вместо коммита «создан критический файл». git log
показывает, что этот коммит 785f75. Здесь мы go:
humlet:gittest matt$ git branch temp 785f75
humlet:gittest matt$ git checkout temp
humlet:gittest matt$ echo whoa > crucial.txt
humlet:gittest matt$ git commit -am "teehee"
humlet:gittest matt$ git rebase temp master
Теперь мы вставили коммит ("teehee"), содержащий исправленный vital.txt , но у нас слишком много коммитов:
changed dummy again
changed dummy
teehee
created crucial file
start
Так что теперь мы go вернулись и взяли sh "teehee" на "созданный важный файл". Для этого мы делаем интерактивный перебаз, начиная с коммита, предшествующего им обоим, то есть «начало»; git log
показывает, что это e01e0c5:
humlet:gittest matt$ git rebase -i e01e0c5
В интерактивном ребазе мы pick
показываем все коммиты, кроме того, что мы squash
"teehee". Когда нам предлагается изменить сообщение коммита, мы меняем его на «созданный важный файл». git log
показывает, что у нас теперь есть
changed dummy again
changed dummy
created crucial file
start
Хорошо, теперь давайте проверим, что находится в коммите "создан критический файл":
humlet:gittest matt$ git diff 65c198 e01e0c
diff --git a/crucial.txt b/crucial.txt
deleted file mode 100644
index 0a6a129..0000000
--- a/crucial.txt
+++ /dev/null
@@ -1 +0,0 @@
-whoa
Итак, вы видите, это выглядит как " создал критический файл "добавлен resol.txt , и он состоит из" whoa ". Это желаемый результат.
Отказ от ответственности: Изменение истории, которую вы нажали, неверно. Не делай этого.