2013-06-28 62 views
14

我在我的项目中做了一个很大的重构:我重命名了文件,删除了,添加了......此外,我在.gitignore中添加了一些文件夹。但是,我已经在重构之前对远程存储库进行了提交。“重新启动”存储库的方式

是否有任何使git“重新启动”我的存储库?如果没有,我该怎么办?

更新

我已删除的文件夹git的,我现在有

提示的错误:更新被拒绝,因为你的当前分支的尖端后面提示:其远程对口。合并远程更改(例如'git pull')提示:再次推送之前。提示:有关详细信息,请参阅'git push --help'中的'关于快速转发的注意事项'。

我不想合并本地更改与远程回购,我只是想推到那里,这意味着完全用本地代替远程存储库。

+0

你想有一个干净的历史被 “重新发起”?你为什么不直接前进并提交新的更改? – Mingyu

+0

@明宇,我只做了一次提交,所以有一个干净的存储库是个好主意。 –

+0

远程回购的性质是什么?如果它没有任何活动克隆,请将其替换。 – tripleee

回答

5

UPDATE

如果你删除了文件夹.git(不是一个好主意),你可以创建回购的新克隆和移动你的东西到,并继续在那里。像这样的东西

cd .. 
git clone <remote-repo-url> new-repo 
rm -rf new-repo/*       // this will not remove new-repo/.git 
cp -f <original-local-repo> new-repo 
cd new-repo 

然后继续如下。

请注意,如果您可以恢复.git文件夹,则效果会更好。创建一个新的回购将松动您在原始本地回购中的所有本地回购信息,例如从未推入的本地分支。

结束时更新

是改写历史,您可以

git reset --soft HEAD^ 
git add -A . 
git commit -m "rewriting history" 
git push --force origin master 

这将备份到先前的承诺(同时保持工作树和索引),提交更改,然后强制推到远程。

push --force是危险的东西。它会打扰那些已经拉下来的人,并且被认为是非常粗鲁的,但是如果没有其他人开始工作,那不是问题。

这是正在发生的事情:

--- A -- B master 

    ^
    |  
    origin/master 

git push 

--- A -- B master, origin/master 

git reset HEAD^ 
git commit -am "rewriting" 

--- A -- B origin/master 
    \ 
     \ 
     B' master 

git push --force 

--- A -- B 
    \ 
     \ 
     B' master, origin/master 
+0

这是否工作?我认为git被设计为不接受删除历史记录的远程提交。或者是 - 什么 - 力量呢? – Paul

+0

您可以整天重写历史记录,但提交的散列值将会改变。你不能改变提交的内容,但你可以修改它,创建一个新的提交类,并且你可以重新定义你的'master'指向什么。 – tadman

3

偷懒的方法是只添加所有的新文件,并修改和删除:

git add -A . 

只要你没有任何冲突,这应该在精细合并。

+0

但我不想从项目中删除这些文件。好吧,我希望它们中的一些永久删除(从回购和磁盘),但对于其他人,我只希望他们不要在git索引(使git没有看到它们 - 对于那些在的.gitignore)。我必须通过“git rm ...”手动删除它们吗? –

+0

听起来像他想要的是一个干净的历史...... – Mingyu

+0

您可以随时将这些文件暂时移出您的项目,提交“删除”,然后将它们移回到之后他们将被忽略的位置。一旦移动,'git add -A .'将会暂停这些删除操作。提交后,如果您的'.gitignore'设置正确,将它们移回对您的回购没有任何影响。 – tadman

2

下面是步骤,重新初始化存储库。

场景:我已经删除了一个本地项目文件夹,我以前已经做过git init。之后,我想用同一个项目的新文件夹更新到现有的git存储库。然后我按照以下步骤解决它。

程序

git init 
git add --all 
git commit -am "re-init" 
git remote add origin https://github.com/{yourgit}/{yourproject}.git 
git push --force origin master 
相关问题