我的git有问题。我有一个项目的存储库,它已经老了,想要开始一个新版本。我创建了一个新分支(3.0-wip
)并删除了文件和文件夹以重新开始。但是,如果我签出我的主分支,文件和文件夹也会从那里消失。
我如何拥有我的存储库,以便我的主分支拥有远程仓库所拥有的所有东西,但我的3.0-wip
中的一个完全不同的工作目录,我可以修改到我的心脏内容而不破坏任何其他文件和文件夹分支?
答案 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"提交:
mkdir $DIR; cd $DIR; git init
touch README; git add --all; git commit -m "Init"
现在转到原始回购并且:
git remote add start-anew $DIR/.git
git fetch start-anew
git co -b start-anew start-anew/master
并留下一个空洞的历史分支。
您可能希望删除遥控器,然后更改分支的遥控器。我通常手动编辑.git/config
,到目前为止没有发生意外。