2015-03-13 76 views
0

所以我在分支A.我做git pull origin master它告訴我我是最新的。我結帳主,我看到文件1.我結帳分支A和文件1不存在,即使它告訴我我是最新的。Git不拉取所有文件,但檢出分支有他們?

我再次檢出主機,創建分支B.我檢出分支B和文件1在那裏。我做拉G原點A和文件1不再存在。同樣的情況發生,如果我扭轉過程,並創建B然後從A推到B.所以在這一點上,我不能推到主,因爲它似乎我會刪除很多需要的文件,但我不能拉和得到它們。

我在分支A中有更改我想要,我沒有刪除任何文件。出於某種原因,它的行爲就像我刪除了文件1,即使我意外刪除了它,爲什麼不能爲我返回它?

有沒有一種方法可以告訴git給我所有缺少的文件從一個分支到另一個?

回答

1

根據你的描述,這聽起來像你刪除了branchA中的File1。當從origin/master下拉時,Git發現origin/master中沒有發生File1中的任何事情,並且該分支A中的文件已被刪除,因此當它合併它們時,會合併爲刪除File1。請記住,「拉」只是一種獲取和自動合併兩個分支的方法。

如果你想恢復branchA上的File1,有幾個選項。如果你還沒有推動它,一個選項就是重新佈局並擺脫刪除。或者,您可以運行git checkout master -- File1以檢出主服務器上存在的File1版本,並將其添加到branchA上的提交以將其添加回來。

如果你想比較分支機構,只需git diff就足夠了。如果您想查看哪些文件已被添加,刪除或更改,可以使用git diff --stat。嘗試執行git diff --stat master origin/master以查看您的主分支和origin/master之間的變化。

使用gitkgit log --graph --decorate --oneline可視化這些更改也很有用。 gitk master...origin/mastergitk origin/master...branchA可以幫助您查看在其中一個分支中提交了哪些提交,而不是其他提交。

+0

好的,我遺漏了當地的主人是最新的原始大師。在主,我也做一個git拉起源大師就好了,它有文件1. – 2015-03-13 17:08:57

+0

@o_O啊,看起來我誤解了你寫的東西。我已經根據更仔細的閱讀更新了我的答案。 – 2015-03-13 17:23:39

+0

是的,我是sol。我已經嘗試過重新裝訂,它做了很多超出我的水平的東西。我真的希望只有一種簡單的方法來恢復文件。 – 2015-03-13 18:33:42

0

您在分支A中的某個提交將刪除您關心的文件(或多個文件)。既然你說因爲這個原因你不能推分支A,我假設你還沒有發表你的歷史,並且想重寫它。

要找到其提交刪除文件,請嘗試:

git log --stat master..A 

然後嘗試:

git checkout A 
git rebase -i master 

和標記承諾,你想修復與「E」編輯。

然後用看的,國家承諾:

git status 

,並撤消清除這些文件:

git reset file-that-was-deleted 
git checkout -- file-that-was-deleted 

,並恢復變基:

git rebase --continue