我有多个活跃分支需要同时处理。显然,我可以创建两个工作目录,每个目录一个独立的分支。这是不需要执行“提交”和“检出”以切换分支的唯一方法吗?
我有多个活跃分支需要同时处理。显然,我可以创建两个工作目录,每个目录一个独立的分支。这是不需要执行“提交”和“检出”以切换分支的唯一方法吗?
如果您需要暂时切换分支,git stash
是很有用的,但请记住,提交不需要永久保存;您可以做临时提交以便稍后回滚。
因此,我的建议是,如果要长时间切换,请使用git commit
,因为根据您的记忆力,stash可能很容易被遗忘、丢失等。
[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
给你的 贮藏 添加有用的信息,否则以后可能会很难找到。
是的,如果您还没有准备好完成当前正在进行的工作,您可以使用git stash
而不是commit
。
我厌倦了在不同分支之间切换,因此我写了一个更智能的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
}
last_git_branch_used.txt
没有关于git repo的信息,所以如果你在不同repo的不同分支之间来回切换,这就没那么有用了。但我仍然认为我节省了无数次按键。 - skensell如果您正在进行所谓的分支特性开发,如此处所解释的:
http://martinfowler.com/bliki/FeatureBranch.html
你可能还想确保切换数据库模式。Git 可以通过 smudge 和 clean 来帮助实现这一点。这样就可以在本地管理多个数据库了。当你检出一个新分支时,你可以使用 smudge 命令将连接字符串注释为分支名称。如果配置文件在任何时候被提交,它会通过删除连接中的分支名称来进行清理。
欲了解更多信息,请参阅Pro Git book。
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
当然,这样你的提交总是在分支的顶部。只要你不将分支合并到主分支中,这种方法就有效。
git rev-parse HEAD^2
代替。 - Andrew Cgit log
(不带 -1),那么你将浪费10秒钟到几分钟的时间。 - Andrew C