背景资料:
由于现有系统的工作流程受到限制,我们需要建立一个有点非正统的git过程.
(patch) A-B---F
| |
(hotfix) C-D-E
|
(dev) 1-2-3-G
Run Code Online (Sandbox Code Playgroud)
在补丁分支上,有一些提交.这里的文件与dev上的文件类似但不完全相同(同步脚本按照许多文件中的设置顺序切换,使它们在功能上相同时显示为已更改).
此分支需要修复,以便创建并处理修补程序分支.然后,这个分支合并回补丁,到目前为止,非常好.
需要将相同的修补程序部署到dev分支,以使其与修补程序保持相对同步,但尝试合并修补程序分支会导致git尝试合并来自A和B的所有不相关和"未更改"的文件,而不是只有C,D和E.
题:
看起来,cherry-pick做了我们想要的只是从选择的提交中获得更改,但我真的想要一种方法来同时挑选给定分支中的所有提交,而不必每次都查找提交ID .
在Subversion中,使用"svn merge -ra:b mybranch"很容易从分支合并一系列变更集/差异.但是在git中,我发现只能从分支机构中选择一个提交来将该补丁应用到我当前的工作分支.所以我想知道是否有一种快速的方法可以在一个错误修复分支中的两个标签之间一举应用所有提交到我当前的主分支?
我一直在使用git-svn,最近,我在尝试提交时遇到了错误(我认为这是由于libneon中的一个错误,但这超出了这个问题的范围).解决方案是使用重新克隆我的git存储库git svn clone.但是,我在我的旧git存储库中的master分支上有更改,我无法使用svn git svn dcommit.我想在使用git svn克隆的新存储库中重放这些更改.我想我可以使用导出补丁集git format-patch,然后在新的存储库上重放这些更改,但我不完全确定如何做到这一点,我想知道是否有更简单或更优雅的方法来实现这一点.
拥有两个分支的存储库.
主分支提交:
c1,c2,c3,c4,c5,c6,c7,...,c15,...
暂存分支提交:
c1,c2,c3,c4,c5,c6,c7
我想在c7之后将所有提交从Master分支转移到分段分支
然后还原Master分支
同
git reset --hard c7-hash
Run Code Online (Sandbox Code Playgroud)
如何将特定提交从一个分支移动/复制到另一个分支?
我向主人做了一堆提交,并意识到他们应该在一个分支中.
我已经看过各种关于变基和合并以及重置主人的事情.但是没有任何操纵尝试产生了一个看起来像我正在尝试做的事情的历史.
我的尝试让我相信它需要一些组合rebase --onto并将reset --hard主人及时移回.但是我对Git分支的理解还有待改进.这样做的一部分是学习如何使用它.
应该注意的是,我试图移动的所有变化都没有被推出.
当前
* remote/trunk
--o--a--b--c--d--e--f <- master
|
o <- remote branch foo
Run Code Online (Sandbox Code Playgroud)
期望的结果
* remote/trunk
--o <- master
|
o--a--b--c--d--e--f <- remote branch foo
Run Code Online (Sandbox Code Playgroud) 我的客户使用Bitbucket作为他的git repo,我做了很多工作,在其中创建了许多pull请求,但最近他没有我的拉动请求将他的回购移动到Github.
我如何将pull请求移动到复制的Github repo?
我看到那篇帖子:如何将所有分支从bitbucket移动到github?,但在那里他们讨论了将repo本身与其他所有东西一起移动,但在我的情况下,我只需要移动pull请求.
我一直在为我的单人开发使用git一段时间,但直到现在我还没有遇到任何棘手的分支问题,我似乎已经忘记了一些基本的东西,我在阅读实用版之后无疑会"知道"使用Git Book控制..
我经常在我的网站上发布的内容之前发布几个版本,因此当出现错误报告时,我只会将它们应用于当前的主分支,而不是在下一个发布的版本中修复它们.当然,我想改变它以更快地修复.
假设1.0刚刚发布,1.1即将发布,但我已经开始研究1.3,例如
1.0 - released
1.1 - finished
1.2 - finished
1.3 - in development
Run Code Online (Sandbox Code Playgroud)
一个错误报告出现..通常这将在1.3中修复,但我如何在1.1中修复它?
据我所知,在svn和其他"传统"源代码控制系统中,我需要分支B.1.1和B.1.2并依次将更改应用于每个分支,然后从每个分支构建并最终应用修复主分支.
我似乎记得git,但是,做了一些聪明的事情:我分支B.1.1,在那里进行更改,做{something}和B.1.2并使用修复程序自动更新主分支.这是可能的还是我想象{something}?
有没有办法让现有的分支成为git中的孤儿?
git checkout --orphan似乎只创造了一个新的孤儿?
假设我有3次未提交的提交.现在我想更改第一次或第二次提交的提交消息(为第三次提交更改它们很简单git commit --amend).怎么做?
git ×10
branch ×3
git-svn ×2
git-am ×1
git-branch ×1
git-commit ×1
git-rebase ×1
git-reset ×1
merge ×1
pull-request ×1