我从GitHub中的一个存储库中分叉了一个分支,并为我提交了一些特定的东西.现在我发现原始存储库有一个很好的功能HEAD.
我想在没有事先提交的情况下合并它.我该怎么办?我知道如何合并所有提交:
git branch -b a-good-feature
git pull repository master
git checkout master
git merge a-good-feature
git commit -a
git push
Run Code Online (Sandbox Code Playgroud) 假设我有5个本地提交.我想只将其中的2个推送到集中式仓库(使用SVN风格的工作流程).我该怎么做呢?
这不起作用:
git checkout HEAD~3 #set head to three commits ago
git push #attempt push from that head
Run Code Online (Sandbox Code Playgroud)
最终推动所有5个本地提交.
我想我可以执行git reset来实际撤消我的提交,然后是git stash然后是git push - 但我已经编写了提交消息并组织了文件,我不想重做它们.
我的感觉是,推送或重置的一些标志会起作用.
如果它有帮助,这是我的git配置
[ramanujan:~/myrepo/.git]$cat config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = ssh://server/git/myrepo.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
Run Code Online (Sandbox Code Playgroud) 说我做了几次提交,并希望能够选择我推送到远程存储库的那些提交.我怎么能这样做(在ascii:C1-> C2-> C3-> C4,我想推C2和C4).是否会重新订购rebase,重置,推送然后重置工作?(C1-> C2-> C3-> C4 => C2-> C4-> C1-> C3 =>复位C4 => push =>复位C3).有更好的方法吗?
G---H // Release Branch
/
/
A---B---E---F--- // master
\
\
C---D--- // bug fix branch
Run Code Online (Sandbox Code Playgroud)
根据我们对项目的特殊需求,上述情况很常见.我们的master/dev分支有一些提交.然后我们得到一个错误报告并开始修复bug分支(上面提交C和D).在此期间,dev分支中会发生更多提交.接下来我们被告知我们需要为客户创建一个版本,该版本不能包含上面提交的B,E和F引入的更改,但它应该包括错误修复.
所以我们在更改B之前应用了dev,但是将错误修复到这个版本分支的最佳方法是什么?如果我执行分支的合并,它将包括在B中做出的我不想要的更改.我可以执行提交C和D的樱桃选择,但我读到基于这个答案的樱桃采摘并不总是一个好主意,因为我的回购将会是这样的:
G---H---C'---D'--- // Release Branch
/
/
A---B---E---F--- // master
\
\
C---D--- // bug fix branch
Run Code Online (Sandbox Code Playgroud)
因此C'和D'显示为具有不同sha-1 ID的全新提交,如C和D.这真的是一件坏事吗?这会导致什么问题?有没有更好的方法将错误修复分支的更改发送到发布分支?
我在开发VHDL代码时使用git.我正在开发git分支中的组件:comp_dev.组件接口不会改变,只是组件内部的代码.现在,这个组件已经存在于master分支中,但是在一个更稳定的版本中,足以让其他开发人员能够使用该组件.其他开发人员也有他们工作的分支,当他们的代码很好时,他们将他们的分支合并回主人.
在这个阶段,我需要能够将所有更改从master返回到我的comp_dev分支,这基本上没有问题,但有时我正在处理的组件的稳定版本确实会作为其他设计师工作的一部分而改变,但是不是界面.每次我想要合并时,我必须在该特定文件上进行手动git merge -s ours,否则我会遇到需要手动解决的冲突,抛弃他们的工作.
如果我想将其他文件中的更改合并回master,也会发生同样的情况.如果我在执行git merge之前忘记执行git merge -s src/rx/state_machine.vhd comp_dev,那么我最终会进行手动合并,或者我不小心将状态机的不稳定版本合并到了稳定的.
有没有办法暂时从合并中排除一个文件?
一些背景:
目前在CVS上,并希望转移到Git.我们每个月左右为我们复杂的定制内部平台做计划发布.
在当前的开发工作流程中,我们有多个分支,每个分支都针对我们的计划发布,例如:
(我们可以同时处理六个计划发布的版本).
我们还为已经没有发布日期的大型项目命名了项目分支.当日期已知时,它们最终会合并到选定的计划发布分支中.
每个版本都非常庞大(许多功能),因为版本需要中断,我们不能经常使用它们,我们确实可以每个月左右批准一次发布停机时间.
随之而来的是合并冲突.我们有一个CVS报告,它提供了要完成的手动合并列表,我们在几个开发人员之间分配了工作.有没有办法用Git做同样的事情 - 在多个开发人员之间将合并工作从一个分支拆分到另一个分支(导致许多冲突)?
编辑:
这就是我最终做的事情(注意我们使用Atlassian Stash/BitBucket Server进行拉取请求/代码审查):