我有两个分支:master
和development
。 development
分支包含一些已完成的新功能和几个未完成的修改 - 但尚未提交任何内容。自创建分支以来,Master没有改变。
我想将已完成的功能提交给dev并将它们合并回主分支进行部署,但是暂时将未完成的修改保留在dev上。
顺便说一下,没有任何文件跨越两个类别(例如,没有任何内容被更改/添加为新的完整功能的一部分,后来被修改为尚未完成的功能的一部分。)
我的直觉是,我应该手动将完成的功能集中的所有隐含文件添加到git队列,将这些文件提交到dev,然后将分支切换到master并进行合并。
但这会保存我在dev分支中未提交功能的工作吗?或者这是需要存储的情况之一?如果是这样,做正确的命令是什么?
答案 0 :(得分:5)
我认为最简单的解决方案,没有任何技巧,将是:
对包含已完成(就绪)功能更改的所有文件使用git add <file>
旁注: 即使您的更改混合在一起,您也可以使用git add --interactive
选择下一次提交中您希望拥有的更改部分。
(可选)测试您现在在索引中准备的更改:
$ git stash --keep-index
$ run tests
$ git stash pop
根据索引中准备的更改(包含准备好的更改)进行提交
$ git commit
(我个人使用git commit -s
进行自动签收,但这取决于项目使用的做法)
收起尚未准备好的变更
$ git stash save
结帐'主'分支,并合并'dev'分支(这应该会导致快进):
$ git checkout master
$ git merge dev
返回'dev'分支,取消暂停更改
$ git checkout dev
$ git stash pop
你可以在不使用git stash
的情况下做到这一点,依靠'master'分支应该快进并通过git update-ref
命令直接操作'master'分支这一事实。不过我不推荐它。
答案 1 :(得分:1)
您可以在那里使用存储来保存本地mod并转到master进行合并。
但是,如果这些功能不相关,我会将所有内容提交给dev,rebase -i将未完成的功能置于所有内容之上,然后获取上次完成提交的ID。
然后从大师那里做git merge last-completed-commit-id ,那就是全部。
编辑:使用rebase -i你可以交互式地重新提交提交,所以如果它们是独立的你就不应该有问题,只需要git rebase -i HEAD~5(5次提交)和重新排序。
如果您的提交不是独立的并且需要一个接一个地进行,那么这当然不会起作用
答案 2 :(得分:0)
查看存储和一些示例如何使用它here。 我个人只提交脏分支,然后与以前的版本合并。承诺在git中很便宜,其背后的意图是经常提交。