Если вы сразу после переключения на master заметили, что забыли внести или зафиксировать некоторые изменения, вы можете просто сразу же вернуться назад с помощью git checkout b1
и затем зафиксировать их.
Однако вы правы в том, что очень легко зафиксировать изменения в неправильной ветке. К счастью, ветви git очень легкие - они просто указатель на конец ветви в графе коммитов - и у git есть хорошие инструменты для переписывания истории, чтобы она выглядела так, как вам хотелось бы. Что именно вам нужно сделать, зависит от последовательности того, что вы сделали, но есть много вопросов по переполнению стека, которые касаются этого. (Или вы можете просто спросить новый, если неясно.) Вот простой пример:
... или если вы сделали много коммитов на мастере, которые внезапно осознаются как слишком спорные, и должны появиться в новой ветке темы, вы можете сделать следующее:
# Check that git status is clean and you really are on the master branch:
git status
# Create a branch based on your current position:
git branch controversial
# Move master back to the last non-controversial commit, making
# sure that the working tree and index match:
git reset --hard <NON-CONTROVERSIAL-COMMIT>
Если в вашей существующей ветке уже было много коммитов b1
, вы можете выбрать их из master:
# Switch back to `b1`:
git checkout b1
# Cherry-pick the commits that you'd rather were on b1:
git cherry-pick <CONTROVERSIAL-COMMIT-A>
git cherry-pick <CONTROVERSIAL-COMMIT-B>
# Switch back to `master`:
git checkout master
# Reset master back to the last non-controversial commit, making
# sure that the working tree and index match:
git reset --hard <NON-CONTROVERSIAL-COMMIT>
... из, если у вас есть лоты коммитов на мастере, которые должны быть на b1, вы можете использовать git rebase
.
Короче говоря, легко оправиться от такого рода вещей - вам просто нужно понять, как выглядит график коммитов, где вы находитесь, и как бы вы хотели, чтобы он выглядел.