Git合并而不删除当前分支中的文件

Git合并而不删除当前分支中的文件,git,merge,Git,Merge,我是git新手,正在学习如何使用它将其集成到我的工作流程中。 目前,以下是我的分支模型(基于此站点): 两个常设分支机构: 表示当前生产分支的主分支。 一个开发分支,我认为它的名字很好地表达了:-) 我使用热修复程序来解决问题,热修复程序是从主程序创建的。所以:我想修复hotfix分支上的bug,并将其合并到master和dev中,以使用修复更新我的永久分支(master和dev) 问题是:在Dev分支上,我创建的新文件只在这个分支上(还没有在master上)。跟踪这些文件是因为在此分支上进行了

我是git新手,正在学习如何使用它将其集成到我的工作流程中。 目前,以下是我的分支模型(基于此站点):

两个常设分支机构: 表示当前生产分支的主分支。 一个开发分支,我认为它的名字很好地表达了:-)

我使用热修复程序来解决问题,热修复程序是从主程序创建的。所以:我想修复hotfix分支上的bug,并将其合并到master和dev中,以使用修复更新我的永久分支(master和dev)

问题是:在Dev分支上,我创建的新文件只在这个分支上(还没有在master上)。跟踪这些文件是因为在此分支上进行了包含这些新文件的提交。 当我将修补程序合并到dev中时,合并会删除dev中不在修补程序中的新文件

所以我的问题是:有没有一种方法可以在不删除Dev中尚未安装修补程序的文件的情况下进行合并

git status
On branch hotfix
nothing to commit, working tree clean



git checkout dev
Switched to branch 'dev'
Your branch is behind 'origin/dev' by 2 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)


git merge hotfix
Updating b34835d..458a2cf
Fast-forward
  98 files changed, 1 insertion(+), 47534 deletions(-)


delete mode 100644 TG_anc/.htaccess
 delete mode 100644 TG_anc/Controleur.php
 delete mode 100644 TG_anc/Controleur/Controleur_Ajax.php
 delete mode 100644 TG_anc/Controleur/Controleur_Avertissements.php
 delete mode 100644 TG_anc/Controleur/Controleur_Commande.php
 delete mode 100644 TG_anc/Controleur/Controleur_Intervenants.php
 delete mode 100644 TG_anc/Model/Model.php
…等等,所有不在修补程序上的文件都将被删除。 如果我不进行快进合并也是一样的。。。 也许我做错了什么

我试着把文件放在.gitignore中,ti对这个案例没有任何作用


提前感谢

你的假设是错误的。合并另一个不了解文件的分支时,不会删除一个分支中引入的文件。合并合并更改,而不是覆盖更改

git checkout master
git branch hotfix
>file_only_on_master echo jska13
git add file_only_on_master
git commit -m 'adding file to master'
git checkout hotfix
>fix echo 'fix me'
git add fix
git commit -m 'applied very import hotfix'
git checkout master
git merge hotfix
最后,您的主分支将同时包含主分支上的文件
file\u only\u
fix
(以及以前存在的其他文件)

  • 未创建合并提交,因为它是快进的
  • 假设您的主机位于A,而修补程序位于C。如果您在主机分支上
    git merge hotfix
    ,它将选择将主机快进到C,而不是创建新的提交

  • 因此,您需要首先强制git创建合并提交

    您可以在合并修补程序时添加
    --no ff
    参数以强制创建合并提交。之后,分支将如下所示:


  • 除非您主动删除热修复程序分支上的文件(创建分支后使用
    git rm
    ),否则合并分支不会删除任何文件。热修复程序是从master创建的,实际上我删除了不必要的文件。因此,我想这可能是我的问题的根源。如果仔细查看输出,它会说合并修补程序时“快进”,这意味着
    dev
    分支中没有不在
    hotfix
    中的更改。根据
    master
    dev
    的关系,如果文件在
    master
    上删除(但仍存在于
    dev
    )而
    hotfix
    是从
    master
    创建的,然后合并
    hotfix
    也会从
    master
    带来一些变化,这些变化在dev中还没有出现。很难说分支之间的关系。发布
    git log--oneline--decoration--graph
    的输出可以帮助显示,哪些提交是其中的br主持人:这张图很乱,因为我正在学习使用git并做了很多测试…但我确实做了你所描述的。做这张图的好方法是什么?先在开发人员上取消跟踪文件?哦,谢谢你的回答…我要试试,不知道崩溃退出方法。他并没有假设两个文件都存在在合并修补程序后,开发分支上不存在这两个。
    A -- B -- C
    
      /-- -- -- M  <-master
     /         /
    A -- B -- C    <-hotfix