Временами при работе с 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 stash
git pull
git stash apply
git add -u
git commit
git push
git stash drop

Git rebase

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

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

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

git checkout feature1
git rebase master
git checkout master
git merge feature1

Литература:

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

Tags: ,

This entry was posted on Воскресенье, Декабрь 27th, 2009 at 15:17 and is filed under VCS, Средства разработки. You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.

Comments are closed at this time.