У меня есть несколько активных ветвей, над которыми мне нужно работать одновременно. Ясно, что я могу создать два рабочих каталога с отдельной ветвью для каждого каталога. Это единственный способ сделать это без необходимости "совершать" и "проверять", чтобы переключиться с одной ветки на другую?
Git рекомендации по быстрому переключению между ветвями
Ответ 1
Да, хотя вы можете использовать git stash
вместо commit
, если вы не готовы завершить свою текущую работу.
Ответ 2
Если вы временно переключаете ветки git stash
, полезно, однако, помните, что фиксации не должны сохраняться навсегда; вы можете сделать временные коммиты для отката позже.
Итак, моя рекомендация, если это многочасовой переключатель, вместо git commit
использовать вместо этого, потому что, в зависимости от вашей памяти, задержки можно легко забыть/потерять и т.д.
[In MyBranch]
>$ git commit -m "WIP: Stuff I was working on."
>$ git checkout AnotherBranch
[Do Stuff]
>$ git checkout MyBranch
>$ git reset HEAD^
[Continue]
И так как это вопрос о лучших практиках, не забудьте дать вашему коду полезное сообщение с помощью git stash save
, иначе его будет сложно найти позже.
Ответ 3
git clone
через локальный протокол , является хорошей альтернативой, позволяющей одновременно работать с несколькими ветвями.
Я обычно клонирую одно локальное голого репо на несколько копий (по одному для каждой активной ветки) и использую этот пустой репо в качестве центрального интеграционного репо (так как я могу легко переносить на голый репо, а не на то, -bare repo).
Ответ 4
Мне надоело переключаться между ветвями, поэтому я написал умнее git checkout
. Вставьте следующее в свой ~/.bash_profile
, введите его, а затем просто используйте gch
, чтобы переключиться на последнюю ветку, в которой вы были.
current_git_branch() {
git branch | grep \* | awk '{ print $2 }'
}
# a smart git checkout, with no args it switches to last branch.
gch() {
if [ -n "$1" ]; then
echo `current_git_branch` >"/tmp/last_git_branch_used.txt"
git checkout "[email protected]"
else
if [ ! -f "/tmp/last_git_branch_used.txt" ]; then echo >&2 "ERROR: Please run gch with 1 argument first."
else
echo `current_git_branch` >"/tmp/last_git_branch_used.temp"
git checkout `cat /tmp/last_git_branch_used.txt`
mv "/tmp/last_git_branch_used."{temp,txt}
fi
fi
}
Ответ 5
Если вы выполняете так называемую ветвь-функцию, как описано здесь:
http://martinfowler.com/bliki/FeatureBranch.html
вы также можете убедиться, что вы переключаете схемы базы данных. Git может помочь в этом путем размытия и чистки. Тогда возможно управление несколькими базами данных локально. Когда вы проверяете новую ветку, вы смазываете строку подключения, чтобы аннотировать имя базы данных именем ветки. Если файл конфигурации должен быть зафиксирован в любой момент, он очищается, удаляя имя ветки из соединения.
Для получения дополнительной информации просмотрите Pro Git book.
Ответ 6
У меня есть функция bash, как это:
function gitredocommit {
lastcomment=`git log | grep Date -A 2 -m 1 | tail -1 | sed -e 's/^ *//' -e 's/ *$//' | grep -v Merge`
if [ -n "$lastcomment" ]; then
git reset --soft HEAD^; git add ../; git commit -m"$lastcomment"
else
echo "last commit was a merge, won't redo it"
fi
}
Вы создаете новую ветвь, делаете первый (и последний) коммит, а затем с этим можете делать новые вещи и перезаписывать это сообщение. Если вам нужно обновить от мастера, вы делаете это с помощью
git rebase master
конечно, так что ваша фиксация всегда на вершине в ветке. Это работает до тех пор, пока вы не объедините ветвь в мастер.