git合并与使用git svn重新基址

git合并与使用git svn重新基址,svn,git,workflow,git-svn,branching-and-merging,Svn,Git,Workflow,Git Svn,Branching And Merging,我很困惑,我读了好几篇帖子、博客和文章,不知道该去哪里。我使用的是一个svn服务器repo,我使用git svn将其拉下来并进行处理。我目前是唯一开发此功能的人(即,没有上游更改) 因此,我有一个本地git主题分支vacation,我需要将其合并回master to dcommit,但我不想将所有提交压缩成一个大的提交 我试着做一个gitrebase-I master,它删除了我90%的更改 我需要做一个测试吗 git checkout master git rebase vacation gi

我很困惑,我读了好几篇帖子、博客和文章,不知道该去哪里。我使用的是一个svn服务器repo,我使用git svn将其拉下来并进行处理。我目前是唯一开发此功能的人(即,没有上游更改)

因此,我有一个本地git主题分支
vacation
,我需要将其合并回master to dcommit,但我不想将所有提交压缩成一个大的提交

我试着做一个git
rebase-I master
,它删除了我90%的更改

我需要做一个测试吗

git checkout master
git rebase vacation
git svn docmmit
或者

我害怕那样b/c我以前试过的时候发生了什么
有人能简单地解释一下我应该做什么以及为什么我必须这样做吗?

你应该合并或选择到master而不是rebase中

至于为什么,这是一个排序问题。Rebase意味着您希望更改历史记录,使您的主题分支在历史记录中显示在master之前。如果您合并或cherry-pick提交,那么它会将您的提交添加到master的顶部

所以,一个完整的循环应该是这样的

git checkout -b vacation
[make changes]
git commit -a -m "Commit message"
git checkout master
git merge vacation
git svn dcommit
为了更全面地解释rebase,请以我个人的设置为例:除了master之外,我还维护一个本地分支工作,我将其用作我本地配置out项目的基础。它有一些我不想提交的自定义属性文件。我需要与主分支保持同步,因此我从主分支开始执行此操作:

git svn rebase
git checkout work
git rebase master
现在git重建工作分支的历史,将所有本地配置提交放在堆栈的头部。它在主分支的基础上随意重新创建分支。如果我要发布

git merge master 

而不是重新定位,那么结果将是相同的,但历史将是非常不同的。这两个历史记录将被解析,可能会导致合并提交,而不是一个基于另一个之上的提交。

所以我想我找到了答案

git checkout vacation
git rebase master 
[ masters's chages put behind this branches, replay every commit ]
git checkout master
git merge --ff-only vacation
git svn dcommit 
[ each change goes into svn as seperate commit ]

我没有上游更改,但这正是我想要的。

编辑也澄清了这一点,这正是我想要的,所以当我合并时,我有一个svn理解的线性历史,没有合并提交
git checkout vacation
git rebase master 
[ masters's chages put behind this branches, replay every commit ]
git checkout master
git merge --ff-only vacation
git svn dcommit 
[ each change goes into svn as seperate commit ]