在不同的git分支中维护不同的目录结构

Mar*_*ean 6 git

我有一个git的问题.我有一个项目的存储库,它已经老了,想要开始一个新版本.我创建了一个新分支(3.0-wip)并删除了文件和文件夹以重新开始.但是,如果我签出我的主分支,文件和文件夹也会从那里消失.

我如何拥有我的存储库,以便我的主分支拥有远程仓库所拥有的一切,但是我的工作目录完全不同3.0-wip,我可以修改我的内容,而不会破坏任何其他分支中的文件和文件夹?

wad*_*rld 8

发生的事情是你没有正确使用git.创建分支并删除文件和文件夹绝对没有问题.当您切换回主分支时,将删除已删除的文件和文件夹,因为它们尚未从该分支中​​删除.

在你的情况下发生的是你通过使用操作系统删除而不是"git rm"命令从git下删除了文件/文件夹.这就是git status将它们报告为"已删除"的原因.这也是切换分支时文件保持删除的原因.git期待文件存在,而不是.

Git状态告诉你运行"git add"但这不起作用.由于文件不再存在,运行git add将无声地失败.您可能没有注意到,但该消息还告诉您运行"git rm".你可能认为你不能这样做,因为文件已经消失,但事实并非如此.即使您已从文件系统中删除了该文件,rm命令仍将成功从repo中删除该文件.

另一个,你可以做的更容易的事情是运行git add -A.-A标志将告知添加通知任何已删除或添加的文件.

试试这个测试:

git init test-delete
cd test-delete
touch filea
mkdir dir_b
touch dir_b/fileb
git add .
git commit -m "Initial commit"
git checkout -b new_branch
rm -rf dir_b
git add -A
git commit -m "deleted files from branch"
(ls to prove files arent' there)
git checkout master
(ls to show files have been restored)
git checkout new_branch
(ls to show files are gone again)
Run Code Online (Sandbox Code Playgroud)


Mar*_*ian 6

一个分支中的委托更改不会影响另一个分支.你需要提交所有删除,这是多米尼克试图解释的.简单地说:

$ git co $NEWBRANCH
$ git status
Run Code Online (Sandbox Code Playgroud)

你会看到数以万计的未经修改的删除.您必须使用git rm删除文件.
不确定是否git add --all也会处理删除.无论如何,这是IMO不是重新开始的最好方式,因为新的分支仍然有旧的历史.

我认为最好创建一个新的"disconected"提交:

  1. 创建一个新的仓库: mkdir $DIR; cd $DIR; git init
  2. 创建初始提交. touch README; git add --all; git commit -m "Init"

现在去原始回购和:

  1. 将其添加为远程: git remote add start-anew $DIR/.git
  2. 抓取它: git fetch start-anew
  3. 把它拉进去: git co -b start-anew start-anew/master

并且有一个新的空洞历史的分支.

您可能希望删除遥控器,然后更改分支的遥控器.我通常.git/config手动编辑,到目前为止没有发生意外.