繁体   English   中英

使用master更新git分支而不进行合并

[英]Update git branch with master without merge

我是一个从事相当大项目的唯一开发人员。 我在master做了几个重要的改变,我即将恢复在feature分支上工作,这个feature已经落后于一个很好的协议。 feature分支确实需要来自master的更改,但我不想将更改合并到master直到feature上的工作准备好发布。 我认为这是一个相当简单的变基,但我不确定。 下面是我的情况的一个非常简化的版本(实际历史更长)。

* 0e109d5 - (HEAD, origin/master, origin/HEAD, master) latest commit
* 9188511 - major schema change
| * d3472a5 - (origin/feature, feature) feature branch commit
| * 6c36837 - Start of feature branch
|/  
*   80d93a8 - Base commit
  1. 我确实将feature推送到遥控器进行安全保护,这对于变形来说通常是一件坏事。 但由于它没有与其他任何人共享,我可以简单地删除远程分支并继续它从未存在过吗? 我的remote只是用于离线存储和安全(它是一个普通的git服务器,而不是github)。
  2. 假设远程分支不再是一个问题,我可以将master feature并继续处理feature而无需将master快速转发到最后一个功能分支提交吗?
  3. 我不认为我需要樱桃挑选,因为feature几乎需要master所有变化。
  4. 我想我也可以制作一个补丁文件(从基础提交到HEAD并尝试将其应用于feature

任何建议表示赞赏。 我喜欢git,但我还没有经验。

由于您的远程feature分支仅出于安全保护的目的而存在且未与其他任何人共享,因此删除分支或强制推送它当然是安全的。 您可以在master上的分支feature当前的工作,并继续处理它:

# while staying at feature branch
git rebase master

根据master中的更改,您可能必须在rebase期间解决一些冲突。

要更新远程安全保护分支(除了您自己以外没有其他人看到过):

git push -f origin feature

历史将如下:

* newsha1 - (feature, origin/feature) feature branch commit
* newsha2 - Start of feature branch
* 0e109d5 - (HEAD, origin/master, origin/HEAD, master) latest commit
* 9188511 - major schema change
* 80d93a8 - Base commit

从本质上讲,提交历史会线性增长,就像您在master引入更改后才开始处理feature

我想你想要的这里是rebase featuremaster 做就是了:

git rebase master feature

如果您目前在feature分支上,只需:

git rebase master

对于你的问题:

  1. 它是无关紧要的,因为你是唯一的开发者。 rebase ,只需使用-f--force-with-lease推送到远程分支。 后者更安全,但对于唯一的开发者来说没有区别。

     git push --force-with-lease origin feature 
  2. 是的,您现在不需要快速转发主人。 完成feature后,您可以执行此操作。 您可以使用--ff-only允许快进合并以保持历史记录的线性。

     git checkout master git merge --ff-only feature 
  3. 是的,这里不需要cherry pick

  4. 无需使用补丁。 Patch程序用于将更改分发给其他人。

    PS。 git非常友好的patch 您可以按照以下方式执行此操作。

     git diff > some.patch git apply some.patch 

    要么

     git diff > some.patch patch -p1 < some.patch 

    要么

     git diff --no-prefix > some.patch patch -p0 < some.patch 

在我看来好像你只想将master合并到你的功能分支中?

git checkout feature-branch git merge master

将尝试将master中的所有提交移动到您的功能分支中,以便您可以在那里处理冲突/合并问题,而无需触及当前的master状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM