Когда вы создали свою ветку thoughtful
, она началась с текущего состояния master
, которое уже содержало коммит. С этого момента две ветви не связаны. Что бы вы ни делали с master
, это не повлияет на thoughtful
. Фиксация, которая представляет файл, все равно будет частью thoughtful
.
Вы должны попробовать git log thoughtful
и git log master
, чтобы просмотреть историю коммитов. На thoughtful
вы все равно увидите коммит, который вы пытались удалить с мастера.
Более полная разбивка следует
Предполагая, что мы в настоящее время на master
...
echo "Lots of code and hard work" > newfile.txt
git commit -m "thoughtless commit" newfile.txt
Вы создали коммит на master
, содержащий newfile.txt
.
# Oh wait, I should've branched!
git branch thoughtful
Вы создали ветку thoughtful
, которая находится в текущем состоянии master
, но в остальном полностью не связана с мастером . Начальная точка ветви - master
, поскольку вы не указали явно начальную точку, и master
в настоящее время извлечено.
git checkout thoughtful
Теперь вы на thoughtful
; вам не нужно checkout
новых веток, чтобы сделать их реальными, этот шаг абсолютно не действует, так как вы делаете следующее:
# Hmm, I didn't mean for that last commit to be in master
git checkout master
Теперь вы на master
.
# get the previous commit's hash
oldhead=$(git log | awk 'BEGIN{commitcount=0; } /^commit/{ if (commitcount++ == 1) { print $2 }; }')
Вы перепрыгнули через тонну обручей, чтобы получить предыдущий коммит, когда вы могли просто использовать master~
или HEAD~
. То, что - это то, как вы получаете «предыдущий» коммит, а не проверяя git log
. В будущем, чтобы отменить последний коммит, используйте git reset --hard HEAD~
.
git reset --hard "$oldhead"
Вы изменили коммит master
баллов. Теперь это тот коммит, который обнаружена вышеупомянутой командой, предположительно, коммит до newfile.txt
. Использование --hard
заставляет Git также обновлять рабочий каталог, поэтому newfile.txt
исчезает; если бы вы пропустили --hard
, newfile.txt
все равно был бы в каталоге, но был бы указан как новый файл в git status
.
git checkout thoughtful
Вы вернулись к thoughtful
, который содержит newfile.txt
, обновив ваш рабочий каталог и снова введя newfile.txt
.