git在分支机构之间快速切换的最佳实践

时间:2010-06-16 16:59:51

标签: git

我有多个活动分支,我需要同时处理。显然,我可以创建两个工作目录,每个目录有一个不同的分支。这是唯一的方法吗,无需“提交”和“结账”,以便从一个分支切换到另一个分支?

6 个答案:

答案 0 :(得分:18)

是的,如果您尚未准备好完成当前正在进行的工作,则可以使用git stash代替commit

答案 1 :(得分:18)

如果您暂时切换分支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 为您的存储提供有用的信息,否则以后可能很难找到。

答案 2 :(得分:5)

git clone,通过local protocol,是一个很好的选择,可以同时处理多个分支。

我通常将一个本地裸仓库克隆到多个副本(每个活动分支一个),并使用该裸仓库作为中央集成仓库(因为我可以轻松推送到一个裸仓库,而不能推送到非仓库-bare repo)。

答案 3 :(得分:3)

我厌倦了在分支之间切换,所以我写了一个更聪明的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 "$@"
    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
}

答案 4 :(得分:1)

如果你正在进行所谓的每个功能分支开发,如下所述:

http://martinfowler.com/bliki/FeatureBranch.html

您可能还希望确保切换数据库模式。 Git可以通过涂抹和清洁来帮助解决这个问题。然后可以在本地管理多个数据库。签出新分支时,将涂抹连接字符串以使用分支名称注释数据库名称。如果在任何时候提交配置文件,则通过从连接中删除分支的名称来清除它。

有关详细信息,请查看Pro Git book

答案 5 :(得分:0)

我有一个像这样的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

当然,所以你的提交总是在分支中排在最前面。只要您不在master中合并分支,这就可以工作。