2012-04-03 104 views
2

假设我在development分支上,并且我刚刚重构了一个小时......我没有计划进入,但一小时后,我碰巧在一些特定功能上做了很多工作,比如说工作在MVC的routing部分。是否有办法将该代码提交给专门的routing分支,该分支可能或不可能存在于项目中,而没有先将其提交给development分支?我希望它可以像过去一小时一样,在routing分支中写代码。将代码提交到特定分支_after_编写所有代码(git)?

在黑客/重构会话期间检出特定分支的问题是您即将进行的工作是不可预知的。因此,无法预先知道“结账routing分行”。所以我最终所做的只是将所有内容都保存在development分支中。但是,这个庞大分支的问题是很难一次处理多个功能而不会破坏所有功能。那么,理想的情况就是将过去的重构过程中的cat >>转换成新的/现有的routing分支。然后在接下来的一个小时内,我可以做一半的路由,半数据库,因此回溯到routingdatabase

这可能吗?您使用哪些工作流程来简化此过程?

+0

不是你的问题的解决方案,但我认为如果你事先知道你要编写代码会更好。请注意,使用git,您可以随时创建尽可能多的分支,然后在需要时提交给那些分支。 – knittl 2012-04-03 07:14:54

回答

3

关键是经常提交。这是Git的一个很好的功能,你可以保留本地提交并在你认为完成时将它们压缩在一起。通过这种方式,您可以轻松地使用重构工作一段时间,只需检出新功能的新分支即可。

在你的情况,你只能阶段“重构”的变化(“git add”),并提交到开发分支。之后(在你的路由变化仍然未分配和未提交)的情况下,你可以检出到一个路由分支并在那里提交非分离的路由变化。

1

最简单的办法就是承诺不管你对我所做的develop,做git checkout -b routing让你有2个分支(开发和路由)都在同一地点

然后git checkout develop && git reset --hard origin/develop把发展回到了它是您开始前黑客攻击。

+1

'git reset --hard'应该总是带着一粒盐。它将从工作树中删除所有未提交的更改(如果您碰巧没有提交所有内容)。另外,这个假设'develop'最近被推送到'origin'仓库('origin/develop'不一定存在)。 'git checkout -b routing && git checkout develop'似乎不需要复杂,为什么不'git branch routing'?这样你就可以留在'develop'分支上,而不必再次切换。 – knittl 2012-04-03 07:11:39

+0

我总是忘记'git branch'的存在来创建新的分支。我很困惑于我的'co -b'工作流程。 WRT to'reset'是的,你必须小心,但我认为这是不言而喻的。 – richo 2012-04-04 01:25:37

1

快速流程:

git stash 
git checkout routing 
git stash pop 

否则,您可以随时提交更改到本地分支:

git checkout -b wip #create branch wip 
git add <some files> 
git commit 
git add <some files> 
git commit 
etc... 

,一旦你COMMITED,您可以跳转到另一个分支和cherry-pick任何你想要的中间提交,或者checkout特定的文件或目录:

git checkout routing 
git cherry-pick 1bf56de #<- sha1 of one of your commits from your wip branch 
git checkout 2cc54aa -- path/to/myFile #<- INDEX gets updated with this version of myFile 
git checkout 2cc54aa -- whole/dir/ 
0

只是检查出你想要的分支,并使用-m标志:

git checkout -m routing 

然后提交更改。

0

在git中分支很便宜,所以分支提前经常

开始任何编码之前,将'开发'分支到临时本地分支。
在那里工作,正如MackeiaN所说的那样,经常犯下,你可以稍后压扁。
请记住,在推送到公共服务器之前,您可以在本地更改您的历史记录。
如果你觉得不安全有关历史的编辑,你可以这样做之前再次分支(如果提交由标签或分支引用,你不能失去他们,你反正引用日志的)

当您结束编码会话,将这个临时本地分支合并,重新命名或重命名为它需要去的任何地方。

如果你对git的所有基本操作都没有信心,我建议你阅读the "Pro Git" book,特别是它的"Git Branching" chapter