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

时间:2011-12-16 21:00:27

标签: git

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

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

2 个答案:

答案 0 :(得分:8)

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

在你的情况下发生的事情是你通过使用操作系统delete而不是“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)

答案 1 :(得分:6)

一个分支中的

Commited 更改不会影响另一个分支。您还需要提交所有删除,这是Dominic试图解释的内容。只需:

$ git co $NEWBRANCH
$ git status

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

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

  1. 创建一个新的仓库:mkdir $DIR; cd $DIR; git init
  2. 创建初始提交。 touch README; git add --all; git commit -m "Init"
  3. 现在转到原始回购并且:

    1. 将其添加为远程:git remote add start-anew $DIR/.git
    2. 抓取它:git fetch start-anew
    3. 将其拉入:git co -b start-anew start-anew/master
    4. 并留下一个空洞的历史分支。

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