Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让Git完全忘记文件?_Git - Fatal编程技术网

如何让Git完全忘记文件?

如何让Git完全忘记文件?,git,Git,我正在使用我的master分支保存基本“材料”文件,这些文件在各种项目的子分支中使用。比方说,我在一家生产马车和滑雪板的公司工作。我的主分支将包含所有用作这些产品部件的文件。每个产品都是从master(carg分支、ski分支等)分支出来的。然后使用git-rm移除每个项目不需要的部件(尽管马车上的滑雪板听起来很有趣) 问题是,每当我将我的master分支(可能会有重大更改)合并到项目分支(carg)中时,git认为我真的想忘记对我的git rm文件所做的更改,并将它们添加回树中左侧的滑雪板主版

我正在使用我的
master
分支保存基本“材料”文件,这些文件在各种项目的子分支中使用。比方说,我在一家生产马车和滑雪板的公司工作。我的主分支将包含所有用作这些产品部件的文件。每个产品都是从
master
carg
分支、
ski
分支等)分支出来的。然后使用
git-rm
移除每个项目不需要的部件(尽管马车上的滑雪板听起来很有趣)

问题是,每当我将我的
master
分支(可能会有重大更改)合并到项目分支(carg)中时,
git
认为我真的想忘记对我的
git rm
文件所做的更改,并将它们添加回树中左侧的滑雪板主版本,如下面的代码所示

我怎样才能让git真正地忘记我告诉它忘记并停止跟踪的文件


将一些部分添加到
master
,然后提交:

$ pwd
/tmp/parts
$ git init
Initialized empty Git repository in /tmp/parts/.git/
$ echo rubber > wheels
$ echo steel > skis
$ echo vinyl > seat
$ echo wood > sides
$ ls
seat  sides  skis  wheels
$ 
$ git add .
$ git commit -a -m 'initial parts'
[master (root-commit) ca7610e] initial parts
 4 files changed, 4 insertions(+)
 create mode 100644 seat
 create mode 100644 sides
 create mode 100644 skis
 create mode 100644 wheels
创建一个
货车
项目分支,并移除货车上不需要的零件:

$ git checkout -b wagon
Switched to a new branch 'wagon'
$ ls
seat  sides  skis  wheels
$ git rm skis
rm 'skis'
$ git rm seat
rm 'seat'
$ git commit -a -m 'initial wagon design'
[wagon 384b246] initial wagon design
 2 files changed, 2 deletions(-)
 delete mode 100644 seat
 delete mode 100644 skis
工程队决定更换一些材料。在
master
中提交这些更改,以便它们可用于我们的所有项目:

$ git checkout master
Switched to branch 'master'
$ ls
seat  sides  skis  wheels
$ 
$ echo 'titanium' > skis
$ echo 'metal' > sides
$ git commit -a -m 'design requirements call for stronger sides and skis'       
[master a8bf4c4] design requirements call for stronger sides and skis
 2 files changed, 2 insertions(+), 2 deletions(-)
我们需要在
旅行车
项目中进行一些更改,因此合并
主机
以获得这些更改,但现在git抱怨:

$ git checkout wagon
Switched to branch 'wagon'
$ git merge master
CONFLICT (modify/delete): skis deleted in HEAD and modified in master. Version master of skis left in tree.
Automatic merge failed; fix conflicts and then commit the result.

我认为您可能不是将git用作源代码控制系统,而是更像一个解决方案管理器。想一想,如果您想在签出新分支时删除文件的不同部分,为什么要将文件置于源代码管理之下

功能分支是开发路径上的分支,旨在与master合并,并为整个项目带来额外的功能


您可以为每种材料创建一个repo,然后设置一个项目构建,以从材料repo获取所需的材料。

我认为您可能不是将git用作源代码控制系统,而是更像一个解决方案管理器。想一想,如果您想在签出新分支时删除文件的不同部分,为什么要将文件置于源代码管理之下

功能分支是开发路径上的分支,旨在与master合并,并为整个项目带来额外的功能


您可以为每种材料创建一份回购协议,然后设置一个项目构建以从材料回购协议获取所需材料。

到目前为止,我找到的最可行的解决方案是将master合并到当前分支中,然后使用
--cerial
打印出
已删除更新的
文件列表,然后调用
xargs
删除它们:

git状态——瓷器| awk'{if($1==“DU”)打印$2}'


这不漂亮。将其插入到一个
预合并
git钩子中会很好,但它显然不存在

到目前为止,我找到的最可行的解决方案是将master合并到当前分支中,然后使用
--cerial
打印出
已删除更新的
文件列表,然后调用
xargs
删除它们:

git状态——瓷器| awk'{if($1==“DU”)打印$2}'


这不漂亮。将其插入到一个
预合并
git钩子中会很好,但它显然不存在

因为滑稽地漏掉了要点而竖起大拇指。你误用了
git
,真的需要考虑为你正在做的事情找到一个更好的软件包。可能是这样,但如果你有其他解决方案来实现这一点,请发布它。大拇指为滑稽地错过要点而竖起。您误用了
git
,确实需要考虑为您正在做的事情找到一个更好的软件包。可能是,但如果您有其他解决方案来实现这一点,请发布它。