我有很多Git分支.如何删除已合并的分支?是否有一种简单的方法可以删除它们而不是逐个删除它们?
让我们说我们在git中有以下情况:
创建的存储库:
mkdir GitTest2
cd GitTest2
git init
Run Code Online (Sandbox Code Playgroud)主服务器中的一些修改发生并得到提交.
echo "On Master" > file
git commit -a -m "Initial commit"
Run Code Online (Sandbox Code Playgroud)Feature1分支主,一些工作完成:
git branch feature1
git checkout feature1
echo "Feature1" > featureFile
git commit -a -m "Commit for feature1"
Run Code Online (Sandbox Code Playgroud)同时,在主代码中发现错误并建立了修补程序分支
git checkout master
git branch hotfix1
git checkout hotfix1
Run Code Online (Sandbox Code Playgroud)该错误在修补程序分支中修复并合并回主服务器(可能在拉取请求/代码审查之后):
echo "Bugfix" > bugfixFile
git commit -a -m "Bugfix Commit"
git checkout master
git merge --no-ff hotfix1
Run Code Online (Sandbox Code Playgroud)feature1的开发继续:
git checkout feature1
Run Code Online (Sandbox Code Playgroud)现在我的问题:说我需要我的功能分支中的修补程序,可能是因为那里也出现了错误.如何在不将提交复制到我的功能分支的情况下实现此目的?我想阻止在我的功能分支上获得两个与功能实现无关的新提交.如果我使用Pull请求,这对我来说尤其重要:所有这些提交也将包含在Pull Request中,并且必须进行审核,尽管已经完成(因为修补程序已经在主服务器中).
我做不到git merge master --ff-only:"致命:不可能快进,堕胎."但我不确定这是否对我有所帮助.
我有两个(私人)功能分支,我正在努力.
a -- b -- c <-- Master
\ \
\ d -- e <-- Branch1
\
f -- g <-- Branch2
Run Code Online (Sandbox Code Playgroud)
在这些分支上工作一段时间后,我发现我需要Branch1中Branch2的更改.我想将Branch2中的更改重新绑定到Branch1上.我想最终得到以下结论:
a -- b -- c <-- Master
\
d -- e -- f -- g <-- Branch1
Run Code Online (Sandbox Code Playgroud)
我很确定我需要将第二个分支重新绑定到第一个分支,但我不完全确定正确的语法以及我应该检查哪个分支.
这个命令会产生预期的结果吗?
(Branch1)$ git rebase --onto Branch1 Branch2
Run Code Online (Sandbox Code Playgroud) 我正在使用一个中间Git存储库镜像远程SVN存储库,人们可以从中进行克隆和处理.中间存储库的主分支从上游SVN每晚重新定位,我们正在开发功能分支.例如:
remote:
master
local:
master
feature
Run Code Online (Sandbox Code Playgroud)
我可以成功地将我的功能分支推回到远程,并最终达到我的期望:
remote:
master
feature
local:
master
feature
Run Code Online (Sandbox Code Playgroud)
然后我重新设置分支以跟踪远程:
remote:
master
feature
local:
master
feature -> origin/feature
Run Code Online (Sandbox Code Playgroud)
一切都很好.我想从这里做的是将功能分支重新绑定到远程主分支,但我想从我的本地机器上执行此操作.我希望能够做到:
git checkout master
git pull
git checkout feature
git rebase master
git push origin feature
Run Code Online (Sandbox Code Playgroud)
使远程主控分支与远程主服务器保持同步.但是,这种方法导致Git抱怨:
To <remote>
! [rejected] feature -> feature (non-fast-forward)
error: failed to push some refs to '<remote>'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again. See the
'Note about fast-forwards' …Run Code Online (Sandbox Code Playgroud) 什么是"功能切换"和"功能分支"以及它们之间的区别是什么?
优缺点都有什么?为什么一个比另一个好?
我在Google上发现了一些关于此问题的文章,我倾向于参加"功能切换"阵营,但我不相信"功能切换"在所有情况下都是更好的选择.
version-control continuous-integration feature-branch featuretoggle
我的团队正在使用功能分支来实现新功能,并不断将快照构建部署到远程仓库中供我们的用户使用.因此,"部署"实际上只意味着"分发到远程Maven存储库".我们目前只为主分支而不是功能分支运行持续集成构建,原因如下:我们使用Maven构建我们的项目并在JAR旁边分发JavaDoc和源代码.
我的计划现在是为每个功能分支构建添加一个分类器,并期望在创建和部署这样的工件时使用一个分类器:
文物:foo-${version}.jar,foo-${version}-sources.jar,foo-${version}-javadoc.jar
分支:特征-X
foo-${version}-feature.jar,foo-${version}-sources-feature.jar,foo-${version}-javadoc-feature.jar我并不真正关心工件的确切命名,我只需要为功能分支单独的main,source和JavaDoc工件.事实证明,JavaDoc插件和源插件都没有考虑配置的分类器,因此有效地覆盖了为我的主构建创建的工件.
我真的不想改变artifactId,虽然这可能会解决问题.你如何处理功能分支和与Maven的持续集成?
continuous-integration feature-branch maven maven-javadoc-plugin maven-source-plugin
我正在研究从starteam到git的转换.
目前,在starteam中,我们使用具有特殊名称的"浮动视图".这些浮动视图基本上像别名一样工作.因此,我们可以指定一个特定的别名来结账,我们将获得我们目前正在进行模型测试的分支.
怎么会在git中完成?这基本上是我们的分支机构的组织方式:
这些都是分支机构
master (stable view)
| - Branch 2012.05.01
| | - Project 1
| | - Project 2
| | - model [floating view / alias to Branch 2012.05.01]
|
| - Branch 2012.07.11 (these would also have various child views for projects)
| - Branch 2012.10.17
Run Code Online (Sandbox Code Playgroud)
(模型测试完成后,分支2012.05.01将合并为主)
在我们的自动脚本(ant)中运行我们的模型部署,我们只需从我们的分支机构中检出"模型".这样我们就不必改变我们的脚本,因为我们改变了我们模型测试的哪个分支,并找出我们进行模型测试的哪个视图就像确定"模型"分支引用哪个分支一样简单.
有什么方法可以在git中做类似的事情吗?
编辑:人们在这里感到困惑.
我的git仓库中有一个开发分支和一个功能分支.我添加了一个开发提交,现在我想将该提交合并到我的功能分支.如果我这样做
git checkout feature
git merge develop
Run Code Online (Sandbox Code Playgroud)
我最终得到了合并提交.由于我将频繁地将关于开发的新提交合并到我的功能分支,所以我想避免所有这些不必要的合并提交.我看到这个答案建议做一个git rebase develop但是它最终会重新绕过我的分支方式而且rebase失败了.
更新: 我最终做的是
git checkout feature
git merge develop # this creates a merge commit that I don't want
git rebase # this gets rid of the merge commit but keeps the commits from develop that I do want
git push
Run Code Online (Sandbox Code Playgroud)
更新:我刚刚注意到,当我合并然后rebase到功能分支时,开发时的原始提交会获得不同的哈希.我不认为这就是我想要的,因为最终我会将功能合并到开发中,我猜这不会很好.
这是我的情景:
我的项目遵循主题分支模式.
我创建了一个分支来修复一些问题,让我们调用这个分支problem_fixes.我进行了更改,并提交了拉取请求.
我需要开始处理一个新功能,所以我创建了一个名为my_feature的第二个分支并提交了一系列更改.
在某些时候,我意识到my_feature依赖于尚未被接受和合并的problem_fixes(my_feature分支依赖于第一个分支的一些修复,没有它们我无法取得进展).
如果没有捣乱,我的项目会更快地接受并合并我的第一个分支,这里最好的流程是什么?
我想知道我是否需要基于problem_fixes(而不是master)启动新的第三个分支并在我的提交中合并到my_feature?或者,如果我简单地将problem_fixes合并到my_feature并继续工作也可以 - 假设problem_fixes首先合并为master,当my_feature合并时理论上应该没问题(?)
目前使用git分支创建的最佳实践是为了测试错误的解决方案并且尚未合并,因为审核流程显示错误或有更好的问题解决方案?
一个例子.项目fizzbuzz有一个错误报告,报告空字段崩溃.
handle-empty-fields并对该分支进行了两次提交,"解决"了这个问题.现在handle-empty-fields我的代码中的代码是无用的:它不正确,不能再应用于代码,但它已在该错误报告中引用.
我该怎么办?保持分支?我会很快结束几十个被遗弃的分支,而git无法将分支标记为已废弃或已关闭.删除分支?但是那些查看该错误报告的人会发现它并获得404.
通常建议人们不要重新设置他们的存储库,因为这会给其他开发人员带来问题,尤其是下游开发人员.对功能或错误修复分支有什么建议?
更新:看起来github永远不会删除pull请求中包含的提交.因此,如果您推送更改并将其转换为拉取请求,则可以稍后删除该分支而不会丢失任何更改.好吧,虽然github还在工作;).
feature-branch ×10
git ×8
branch ×3
git-rebase ×2
github ×2
git-branch ×1
git-flow ×1
git-merge ×1
maven ×1
rebase ×1