2015-01-09 43 views
1

我用混帳:從無關倉庫條更改後取出或如何解決「警告:沒有共同提交」?

$ git remote show origin 
* remote origin 
    Fetch URL: git://gitorious.org/bash/bash.git 

但有沒有什麼新的變化,因爲2011年所以我谷歌那裏是官方消息來源:http://savannah.gnu.org/git/?group=bash

我決定把新的原點:

$ git remote rename origin gitorious 
$ git remote add origin git://git.savannah.gnu.org/bash.git 

fetch最新變化,以比較中發生(git log master..origin/master):

$ git fetch origin 
warning: no common commits 
remote: Counting objects: 23368, done. 
remote: Compressing objects: 100% (3449/3449), done. 
^Cceiving objects: 8% (1895/23368), 8.51 MiB | 478.00 KiB/s  

我看到warning: no common commits我打破獲取和漂移如何剝離這種無關牽強的變化從本地存儲庫(我知道我需要清潔clone)之後。

我更喜歡hg它總是抱怨無關的知識庫,除非你-f

回答

3

如果你想以前的遠程完全放棄,你可以簡單地將其刪除:

git remote remove <remote-name> 

這個做什麼,但是,僅僅是刪除遠程輸入和遠程跟蹤分支標籤。讓我展示一個(非常)簡單的兩個遙控器示例,其中包含兩個不相關的提交DAG,以及您自己的本地更改。讓我們把兩個遙控器rmt1rmt2(一個實際上可能是現在gitorious和其他origin但我想概括了一下):

  L  <-- master 
     /
A0 <- A1 <- A2  <-- rmt1/master 

B0 <- B1 <- B2 <- B3 <-- rmt2/master 

A提交代表你從遠程rmt1(遠程帶來了一切你最初,可能現在gitorious)。 有一個本地提交L與你從rmt1得到的東西做了一些改變,你剛剛添加遠程rmt2並帶過其提交圖(B提交)。

如果您現在運行git remote remove rmt1,那麼git將刪除配置行以及rmt1/master標籤。這裏是你還剩下什麼,這還不包括已經消失無形,但尚未垃圾收集提交:

  L  <-- master 
     /
A0 <- A1 

B0 <- B1 <- B2 <- B3 <-- rmt2/master 

這裏的問題是,你自己的本地修改(提交L)使用,因此保存,至少一些原始提交圖 - A-系列提交。

想必,你想要做的是找到一些或所有本地提交是rmt1提交的,看你做了,你想保持什麼樣的變化,並找到了一些合適的承諾(或多個)在B-系列提交中基於這些更改。如果只有一個本地提交,在這種情況下,這很容易;但是如果有很多,你必須決定你想保留哪一個。

在很多情況下,您有一個或兩個分支您現在正在使用,並且這些分支的提示是您想要保留的。在這種情況下,您可以簡單地保存舊的git存儲庫,通過克隆B系列(在本例中爲git.savannah.gnu.org)創建一個全新的git存儲庫,並在新的repo中選擇一些分支(es)移植您的活躍分支提示。在這裏,您只需使用已保存的存儲庫來提取補丁(例如git diff或git format-patch),然後將這些補丁導入到新的存儲庫中。這在概念上要簡單得多。

但在其他情況下,您可能確實希望將遠程回購的內容保留在一個回購站中,至少在一段時間內,直到您可以重新綁定或以其他方式保留您的更改。這是保留和複製兩組DAG的便捷方式,它允許您在任何(獨立)圖中提交時使用git命令,包括在一個圖中將樹與另一個樹中的樹進行比較。它在概念上更復雜,並且是目前你正在進行的方向。

我不能真正推薦一種方法或其他不知道更多關於您的情況。

1

這只是一個警告。將有兩個不相關的提交樹(並且例如gitk將它們視爲不相關,一個接一個),但除此之外不會有其他差異,所有git命令(diffmerge,cherry-pick等)繼續按預期工作。

要清除/隱藏不需要的修訂,您可以簡單地刪除對它們的引用,這是整個git的通用規則。在第二個遠程倉庫的情況下,這意味着你需要刪除相應remotegit remote rm origin。您還可以在.git/refs/remotes/<remote-name>.git/packed-refs手動刪除引用。

刪除引用後,存儲庫中的對應對象將最終刪除並回收空間。您也可以手動運行git gc

+0

好的,我該如何清理/去除/去除無關的變化?我不認爲那些不相關的存儲庫並且不想打擾不相關的提交。 – gavenkoa 2015-01-09 21:53:41