我已经使用Git大约一年了,并认为这太棒了,但我刚刚开始了该项目的第二个版本,并开始了一个新的分支.我正在努力处理未来的最佳方法.
我有两个分支叫做master10(对于v1)和master20(对于v2).我一直在分支master10上的v1中修复bug,并开发master20的新东西.每当我修复bug时,我都会通过检查master20并将其合并到v2中git merge master10.到现在为止还挺好.
然而,现在我在v1中做了一个我不想要的改变,但是我想继续合并其他错误修复.我如何告诉Git跳过该特定提交(或一系列提交),但是未来我仍然希望合并其他错误修复.
我认为git rebase可能是我需要的,但阅读文档和我的头几乎爆炸.
我想我想要的就像是一个"git sync"命令,它告诉git两个分支现在是同步的,并且将来只会合并来自这个同步点的提交.
任何帮助赞赏.
我怎样才能安全地更新(拉)一个git项目,保持特定文件不变,即使有上游变化?
myrepo /配置/ config.php中
有没有办法,即使这个文件在远程更改,当我git pull,其他一切都更新,但这个文件没有改变(甚至没有合并)?
PS.我需要做我要问的事,因为我只是在编写基于git的部署脚本.我无法将配置文件更改为模板.
所以,我需要编写不会丢失本地更改的更新脚本.我希望有一些简单的事情:
git assume-remote-unchanged file1
git assume-remote-unchanged file2
Run Code Online (Sandbox Code Playgroud)
然后 git pull
我有两个分支,A和B.科A有一个目录examples与被跟踪的git一些文件,这些文件应该不会出现分支B.在我的工作流程,我不合并作出改变A成B经常,每次这是一个问题,有一些变化examples.目前我手动执行此操作:在合并后删除文件或解决当我已经删除的文件发生更改时的冲突.
合并期间是否可以忽略这些文件?(或者是否可以将某些文件限制为一个分支(A)或远离一个分支(B)?)
让我试着解释一下为什么我这样做:
A是博客的骨架(模板,脚本等),B是我的博客(A充满了我自己的帖子,图片,草稿等).A是公共的,我试图让它通用给别人看,并使用它,但因此我需要一些帖子作为展示/测试(examples目录).每次更改A并稍后合并到B我的博客实例上进行此更改 - 这样所有新示例都会出现,B并且所有已删除的示例B都已更改,A因为上次合并导致冲突.
我有一个包含两个分支的存储库:live和stage.存储库包含基于Web的应用程序的代码.我想为舞台和现场分支维护两个不同的.htaccess文件,但仍然保持它们的版本控制,因为服务舞台网站的性质有点不同(例如,现在,我希望缓存定时不同).
我是git的新手,所以可能有一个简单的解释,但我想有一个工作流程,当我在现场和我拉变化(简单git merge stage)时,我没有覆盖现有的.htaccess在现场科.有没有办法配置这个?我在git中错过了一些重要的概念吗?
同样地,还有一大块(但可能很多).html文件,我想跟踪变化但不将它们合并回实时.为了清楚起见,我希望live和stage能够跟踪这些文件中的更改,但知道在进行合并时不要合并这些特定的更改.
我有以下目录结构:
/.git
/.git/info/attributes
/MyProject
/MyProject/pom.xml
/MyProject/MyCode.java
Run Code Online (Sandbox Code Playgroud)
我有分支主和bugfix.在两个分支上都修改了pom.xml和MyCode.java.我想将仅来自bugfix的更改合并到MyCode.java的master,并保留pom.xml文件的主版本.
所以我添加了"/.git/info/attributes"因为我不想在项目中提交.gitattributes
$cat .git/info/attributes
pom.xml merge=ours
$git status
# On branch master
nothing to commit (working directory clean)
$git check-attr -a pom.xml
pom.xml: merge: ours
Run Code Online (Sandbox Code Playgroud)
最后到了问题:
当我做:
$git merge bugfix
Auto-merging MyProject/pom.xml
CONFLICT (content): Merge conflict in MyProject/pom.xml
Automatic merge failed; fix conflicts and then commit the result.
Run Code Online (Sandbox Code Playgroud)
Git忽略了属性设置.我在这里失踪了什么?
我不想在这篇文章中定义"keepMine.sh"
这篇文章是我需要的,但是如果我有一个简单的模式,我宁愿不逐个文件
谢谢!
对于将绝对路径和数据库凭证硬编码到Web应用程序中的多个随机位置的人来说,地狱中有一个特殊的地方.可悲的是,在他们下地狱之前,他们正在对地球造成严重破坏.我们必须处理他们的代码.
我必须对其中一个这样的Web应用程序执行一些小的更改.我创建了一个新分支features,并执行全局查找和替换以更新本地环境的路径和凭据.我承诺了.我也把它标记为local.
我快乐地陷入危险的黑客攻击,经过一百个令人困惑的补丁之后,我想将我的features更改合并到master分支中,但我不希望将一个local提交合并.
开始,我将合并来回之间master和features,我想local留在原地的features,并且永远不会显示在master.
理想情况下,我希望所有这一切都神奇地发生,尽可能少有趣的参数.
是否有一种简单明显的方法可以让我失踪?
我能想到一对,但他们都要求我记住我不想要那个提交.这绝对不是我的强项.特别是对于如此糟糕的黑客程序.
如果做不到这一点,我对处理这种情况的更复杂,手动的方法感兴趣.
我试图在一个存储库中保留2个网站项目.除了模板(html,css)文件和少量配置文件外,这些网站主要是相同的.主站点(我说是Supersite)是分支机构的主人.第二个站点位于分支secondarySite中.每当我在master分支中开发一些新功能时,我想将它合并到secondarySite,但我想从合并中排除模板文件.
我在这里找到了部分解决方案如何告诉git始终为特定文件上的冲突合并选择我的本地版本?但它只有在我更改两个分支中的模板文件并且发生冲突时才有效.当没有冲突时,git只使用较新的远程版本的文件.
即使没有冲突,我如何告诉git 始终保持指定的本地文件不变.
或者我可能使用完全错误的方法解决问题?
在此先感谢您的帮助.
我有几个大的Symfony项目,并注意到在将所有内容更新到Symfony 4(Flex)之后,当我们的部署自动化运行其正常过程时:
composer install --no-dev
我们最终得到(例如)这个:
Symfony operations: 2 recipes (72fad9713126cf1479bb25a53d64d744)
- Unconfiguring symfony/maker-bundle (>=1.0): From github.com/symfony/recipes:master
- Unconfiguring phpunit/phpunit (>=4.7): From github.com/symfony/recipes:master
Run Code Online (Sandbox Code Playgroud)
然后,正如预期的那样,这会导致更改为symfony.lock和config/bundles.php,以及其他任何内容,具体取决于其中包含require-dev的内容composer.json.
这些都不是完全破坏,但让生产部署不再具有干净的git status输出是令人讨厌的,并且可能导致对实际部署的内容产生混淆.
对此有各种解决方法,例如我可以放入所有内容require而不是require-dev因为在部署这些内容时没有真正的危害,或者我可以省略--no-devComposer命令的一部分.
但实际上,这里的正确做法是什么?如果您只是部署一个锁定的软件,就没有办法告诉Flex不对配置进行任何更改,这似乎很奇怪.这是一个功能请求,还是我在这里错过了一些配置?
我在开发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,那么我最终会进行手动合并,或者我不小心将状态机的不稳定版本合并到了稳定的.
有没有办法暂时从合并中排除一个文件?
问题是关于git-flow方法的一些边缘情况
我有一些典型的git-flow历史,如下所示:
o---o---o---o [release-3.5.0]
/
----o---o---o---o---o [development]
Run Code Online (Sandbox Code Playgroud)
Git-flow告诉我们将release-3.5.0分支合并到开发中然后发布就绪了.因此,最终我们将获得所有更改,在发布分支进入开发分支.
o---o---o---o
/ \
----o---o---o---o---o [development]
Run Code Online (Sandbox Code Playgroud)
现在想象一下,我们有一个承诺上发布分支"X"我们不要想在开发分支,例如它是某种这已经是更理智的方式固定在发展黑客/修补程序或其他的(按提交ÿIE)
o---X---o---o [release-3.5.0]
/
----o---o---o---Y---o [development]
Run Code Online (Sandbox Code Playgroud)
那么,主要问题是如何处理这种情况呢?如何防止此提交(或提交)重新进入开发?
如何从一系列提交中排除特定提交.我的意思是如果我有5次提交,我只想推送4次提交.这该怎么做.请帮忙解决这个问题.
对于我正在进行的项目,我们决定开发一个工具来帮助开发,因此这不应该在生产中.
所以我想知道,因为git非常棒,如果有一个功能可以阻止某些文件(是的,只有文件:这是一个Magento项目,我们要开发的工具将在他自己的模块中,没有交集应用程序的其余部分)将合并为master,但应该在其他分支中可用.
我们正在考虑使用git-flow,如果这有帮助的话.所以我们将拥有主人,我们将从中创建开发,从中创建我们所有的功能分支.我们的想法是让这个模块开发,但永远不会合并回主人.
我现在在想,只是在主分支中忽略那些文件(.gitignore),这会有用吗?
编辑1:项目结构
我觉得我必须提供有关项目结构的更多信息,它来了:
+ main_folder/
+ magento/
|---+ app/
| |--+ code/
| | |--+ community/
| | |--+ core/
| | |--+ local/
| | |--+ Namespace1/
| | |--+ Module1/
| | |--+ Module2/
| | |--+ Namespace2/
| | |--+ Module1/
| | |--+ Module2/
| |--+ design/
| | |--+ frontend/
| | |--+ default/
| | |--+ default/
| | |--+ layout/
| | |--+ template/
| + …Run Code Online (Sandbox Code Playgroud) 我想从github master full拉出来更新我当前的工作目录.我有一个名为form.html的文件,它存在于我的工作目录中,而旧版本则存在于github origin master分支上.
git pull origin master
Run Code Online (Sandbox Code Playgroud)
当我从主人那里拉出来时,我要求解决冲突.我不想解决合并冲突,而是希望我的本地分支中的文件form.html 完全替换origin master分支上的form.html(远程)
什么是实现这一目标的最佳方式?谢谢
git ×12
merge ×5
git-merge ×4
git-flow ×2
branch ×1
composer-php ×1
dvcs ×1
git-commit ×1
git-push ×1
github ×1
magento ×1
symfony ×1
symfony-flex ×1
symfony4 ×1
workflow ×1