Забыл в ветку в git, нужно переместить изменения с мастера

Я с готовностью нырнул в режим кода и модифицировал некоторые файлы, но сначала отказался от перехода от мастера. Моды не настолько обширны, что я не могу их переделать, но какой хороший способ взять мой (пока что незафиксированный) изменить мастер и перенести их в новую ветку, оставив в конечном итоге мастер нетронутым?

Ответ 1

Если еще не зафиксировано нигде (git status показывает кучу модифицированного материала, это нормально, если он также добавляет "git add" -ed):

$ git checkout -b newbranch

Несмотря на checkout имени, это использование (с -b) ничего не проверяет. Флаг -b говорит: "Создайте новую ветку", поэтому git создает имя ветки и делает ее соответствующей текущей фиксации HEAD. Затем он заставляет HEAD указывать на новую ветку и останавливается там.

Следовательно, ваша следующая фиксация на newbranch, которая имеет в качестве родительского обязательства фиксацию, когда вы начали изменять файлы. Итак, если вы были на master, и у вас были эти коммиты:

A - B - C       <-- HEAD=master

checkout -b делает следующее:

A - B - C       <-- master, HEAD=newbranch

и более поздняя фиксация добавляет новый фиксатор D:

A - B - C       <-- master
          \
            D   <-- newbranch

Ответ 2

git stash
git stash branch <branchname>

Ответ 3

git branch -M master my-branch

а потом

git fetch origin refs/heads/master:refs/heads/master

или

git branch master my-branch  (or another ref)