Временами при работе с 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. You can leave a response, or trackback from your own site.

Leave a reply

Name (*)
Mail (will not be published) (*)
URI
Comment