Подтвердить что ты не робот

Git рекомендации по быстрому переключению между ветвями

У меня есть несколько активных ветвей, над которыми мне нужно работать одновременно. Ясно, что я могу создать два рабочих каталога с отдельной ветвью для каждого каталога. Это единственный способ сделать это без необходимости "совершать" и "проверять", чтобы переключиться с одной ветки на другую?

4b9b3361

Ответ 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

конечно, так что ваша фиксация всегда на вершине в ветке. Это работает до тех пор, пока вы не объедините ветвь в мастер.