我有两个分支.提交a是一个头,而其他有b,c,d,e和f之上a.我想移动c,d,e和f第一支没有提交b.使用樱桃挑选很容易:结帐第一个分支樱桃 - 一个接一个c地挑选f第二个分支到第一个.但有没有办法挑选所有c- f一个命令?
这是场景的直观描述(感谢JJD):

我不确定这是否是Git所支持的东西,但理论上它似乎应该对我有用.
我的工作流程通常涉及我同时在多个分支中编辑文件.换句话说,我经常想在一个分支中打开一些文件,而我在另一个分支中编辑另一个文件的内容.
我的典型解决方案是进行两次检查,但遗憾的是我不能在它们之间共享分支和引用.我想要的是只有两个工作目录由同一个.git文件夹管理.
我知道本地git clone解决方案(默认情况下,硬链接共享对象,以及--shared选项,它使用原始repo设置备用对象存储),但这些解决方案只减少了磁盘空间使用量,特别是在--shared的情况下,似乎充满了危险.
有没有办法使用一个.git文件夹,并有两个工作目录由它支持?或者是Git硬编码只是随时检查一个工作目录?
假设我有一个功能分支,在推送我的更改之前我将上游更改合并到其中:
git branch feature1
... [edit my code]
... [commit]
git fetch origin master
git merge fetch_head [or rebase]
... [resolve conflicts]
... [build and test code]
Run Code Online (Sandbox Code Playgroud)
在这一点上,我希望推动我的改变.这样做的正常方法是:
git checkout master [changes a bunch of working tree files]
git merge feature1 [changes the same files right back]
Run Code Online (Sandbox Code Playgroud)
这工作正常,但会使(日期检查)编译器认为一大堆文件是脏的,即使内容相同也需要重建.在这种情况下,有没有办法结帐并使工作树保持不变?
就像是:
git checkout master --merge-branch feature1
Run Code Online (Sandbox Code Playgroud)
编辑:
我只谈论快速合并,根据定义,它不会改变文件的状态.
我在git中有两个开发分支,我经常需要在两者之间进行更改.然而,真正令人沮丧的是,每次我在git中更改分支时,整个项目都会重建,因为某些文件的文件系统时间戳会发生变化.
Ofc,makefile被配置为将项目构建到两个不同的构建目录中.
有没有办法解决?编译是一个非常漫长而耗时的过程......
编辑: - 这是一个稍微更详细的问题解释...说我有一个头文件Basic.h,它包含在许多其他文件中.分支1和分支2之间的Basic.h不同.
现在假设我已将分支1编译为build_branch1,将分支2编译为build_branch2.说我目前检查了分支2.现在我签出分支1并更改File1.cpp并重新编译.理想情况下,因为自上次编译它以来只有File1.cpp发生了变化,所以这是唯一应该重新编译的文件.
但是,由于Basic.h由于结帐而更改了时间戳,因此将重新编译包含Basic.h的所有文件.我想避免这种情况.
在维护实时系统时,我发现有时需要对文件进行临时临时更改 - 更改日志记录级别,向脚本添加跟踪选项等.
当我这样做时,我的半自动机制用于查找未提交的更改和未合并的分支通常会显示误报:
通常情况下,所有这些都需要找到尚未合并的更改,但这也意味着"隐藏"临时更改的每种方式也会被阻止.
请注意,我不希望--assume-unchanged,因为同一个文件通常包含临时更改(我不想提醒)和永久更改(我这样做),并查看处理临时更改(不承诺)Git没有提出满足所有这些要求的建议.
使用Mercurial,我会考虑使用Mercurial Queues来获得我想要的东西.我会用我的临时更改创建一个补丁,然后如果我的分析实用程序找到一个补丁队列,它会弹出它们,执行分析然后再推回它们.这将有效地仅删除临时更改,仅对我认为不是临时的更改执行分析,然后重新应用这些更改.
任何更改工作目录的方法的问题在于这会影响实时系统的行为 - 例如,我们的日志记录系统每10秒左右检查一次日志记录配置的更新.
那么,我怎样才能最好地指出git某些变化是暂时的,不应该被提交和/或合并,而其他变化应该?
为什么我不能merge进入裸回购?裸回购没有HEAD或没有工作树。在配置文件中,我们可以看到bare=true.
您也不能pull在裸仓库中(因为 pull = fetch & merge 和 merge 不起作用)。但是,你可以推送到一个裸仓库——为什么?据我所知,push还包含一个合并,但在这种情况下我们可以做得很好。
所以,问题可能是“git merge 是如何工作的?”。为什么需要一个HEAD?合并时它在做什么?
git ×6
c ×1
c++ ×1
cherry-pick ×1
git-bare ×1
git-merge ×1
git-pull ×1
git-rebase ×1
makefile ×1
workflow ×1