我有多个活动分支,我需要同时处理。显然,我可以创建两个工作目录,每个目录有一个不同的分支。这是唯一的方法吗,无需“提交”和“结账”,以便从一个分支切换到另一个分支?
答案 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中合并分支,这就可以工作。