Более правильная работа с гит (git stash и git rebase)

Временами при работе с git одновременно нескольких человек возникают не очень красивые записи в журнале: «Merge branch ‘master’ of ssh://<usr>@<server>/path/to/repo», которые не несут особенно большого объема информации. Так, к примеру, посмотрев данный коммит в git-web мы не увидим никакой информации об измененных файлах. Такая ситуация возникает когда вы делаете git pull в вашей рабочей копии репозитория, в которую внесены изменения, при этом происходит авто merge.

Git stash

Для борьбы с такими записями существует специальная команда — git stash.

Команда git stash созраняет все не закомиченные изменения во временное хранилище (карман) и сбрасывает состояние ветки до HEAD.

  • git stash — добавить текущие незакоммиченные изменения в стек изменений и сбросить текущую рабочую копию до HEAD’а репозитория;
  • git stash list — показать все изменения в стеке;
  • git stash show — показать последнее измененеие в стеке (патч);
  • git stash apply — применить последнее изменение из стека к текущей рабочей копии;
  • git stash drop — удалить последнее изменение в стеке;
  • git stash pop — применить последнее изменение из стека к текущей рабочей копии и удалить его из стека;
  • git stash clear — очистить стек изменений.

То есть фактически необходимо вызвать следующую последовательность команд:

Git rebase

При работе с несколькими ветками одновременно в конце концов возникает необходимость применить все изменения с одной ветки на базовую (ну конечно это возникает не всегда, но часто), причем, как правило, базовая ветка с тех пор успела поменять свое содержимое. В таких случаях для слияния веток рекомендуется использовать команду git rebase.

Данная команда сохраняет все ваши изменения на ветке, которые вы сделали с момента ответвления, и накладывает на эту ветку все изменения которые были сделаны на master ветке, после чего применяет все ваши изменения. Таким образом вы получаете ветку, которая ответвляется от текущей master-ветки и теперь вы можете успешно сделать git merge.

Пример использования:

Литература:

  1. git add —help
  2. git rebase —help
  3. http://evasive.ru/articles/git_kung-fu.html


Comments are closed.