2011-12-16 40 views
6

我有一个git问题。我有一个正在变老的项目的存储库,想要开始一个新的版本。我创建了一个新分支(3.0-wip)并删除了要重新开始的文件和文件夹。但是,如果我签出我的主分支,文件和文件夹也从那里消失。在不同的git分支中维护不同的目录结构

我如何拥有我的存储库,以便我的主分支拥有远程仓库的所有功能,但是我的3.0-wip中的工作目录完全不同,我可以在不破坏其他分支中的文件和文件夹的情况下修改我的内容。

+0

你有没有承诺的3.0 WIP分支:

尝试此测试?如果不是,那可能是问题所在。 – 2011-12-16 21:13:00

+0

我克隆了外部回购。创建并检出新的`3.0-wip`分支。通过Finder删除文件/文件夹。创建新的`index.php`文件并提交它。如果我检查我的`master`分支,那么这些文件仍然没有了,`git status`显示所有文件/文件夹都是'deleted:'。 – 2011-12-16 21:23:48

回答

6

受托一个分支的变化不会影响另一个分支。您还需要进行所有删除操作,这正是Dominic试图解释的。简单地做:

$ git co $NEWBRANCH 
$ git status 

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

我觉得这是更好地创建一个新的“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,至今没有发生意外。

8

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

你的情况发生了什么,你已经通过使用操作系统删除而不是“git rm”命令从git下删除了文件/文件夹。这就是为什么git status会将它们报告为“已删除”。这也是为什么当您切换分支时文件保持被删除的原因。 git期待的文件在那里,他们不是。

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

另一个,你可以做的更容易的事情是运行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) 
相关问题