2013-06-28 59 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 
相關問題