2017-03-06 60 views
2

我想重現由於我對this question的企圖答案而導致的問題。在git pull --rebase過程中會怎樣讓git刪除本地文件?

總之

一個github上用戶試圖做git pull --rebase和用戶的本地文件被刪除。我試圖在github上重新創建這個場景,但在我的情況下沒有任何東西被刪除。

那麼,怎樣才能重現我這裏的git拉是破壞性的場景?

細節

1部分:

  • 用戶問到如何本地更改到新創建的遠程倉庫同步。
  • git push失敗,因爲用戶沒有進行遠程更改(如預期)。
  • 我建議使用git pull --rebase,然後再解析,然後再git push
  • 但我的建議導致用戶的本地文件被刪除。 (請參閱original question
  • 請注意,文件被跟蹤(本地提交),因此用戶能夠恢復它們。

第2部分:

  • 我創建了一個名爲回購HTTPS://github.com/user/myrepo,自述初始化和的.gitignore
  • 地方,我所做的:

    初始化回購本地

    > mkdir myrepo 
    > cd myrepo 
    
    > echo AAAAA > fileA.txt 
    > echo BBBBB > fileB.txt 
    > echo ignoreme > .gitignore 
    
    > git init 
    

    犯下的文件在本地

    > git add . 
    > git commit -m"initial commit" 
    

    試圖把遠程改變

    > git remote add origin https://github.com/user/myrepo.git 
    > git branch --set-upstream-to=origin/master master 
    
    > git pull --rebase 
    
  • 的結果(如預期):

    First, rewinding head to replay your work on top of it... 
    Applying: initial commit 
    Using index info to reconstruct a base tree... 
    Falling back to patching base and 3-way merge... 
    Auto-merging .gitignore 
    CONFLICT (add/add): Merge conflict in .gitignore 
    error: Failed to merge in the changes. 
    Patch failed at 0001 initial commit 
    The copy of the patch that failed is found in: .git/rebase-apply/patch 
    
    When you have resolved this problem, run "git rebase --continue". 
    If you prefer to skip this patch, run "git rebase --skip" instead. 
    To check out the original branch and stop rebasing, run "git rebase --abort". 
    
  • 在這一點上,如果我做ls,我的本地文件仍在我的文件系統上。

    > ls -a 
    .   ..   .git  .gitignore README.md fileA.txt fileB.txt 
    

更新:

這裏是誰的問題,原來的用戶評論。

從user7342807:

...我今天早上安裝WordPress正是這一點做到了。

git init 
git add . 
git commit -m "initial commit" 

在這一點上,我已經意識到我已經創建GitHub的頁面 它,在它默認的自述。

所以,不知道這會是一個問題,我試圖將作爲

git remote add origin http://github.com/user/repo.git 
git push -u origin master 

這是我收到的消息:

$ git push -u origin master 
To https://github.com/user/project.com 
! [rejected]  master -> master (fetch first) 
error: failed to push some refs to 'https://github.com/user/project.com' 
hint: Updates were rejected because the remote contains work that you do 
hint: not have locally. This is usually caused by another repository pushing 
hint: to the same ref. You may want to first integrate the remote changes 
hint: (e.g., 'git pull ...') before pushing again. 
hint: See the 'Note about fast-forwards' in 'git push --help' for details. 

所以,與其力推和擦除該在github上README文件,我 做git pull --rebase和git向我展示了這條消息

First, rewinding head to replay your work on top of it... 

我等了大約5分鐘,之前我ctrl+C出來的過程中,和 意識到有大約8-9文件從WordPress的網站刪除。 git status也顯示我刪除的文件。

我能夠恢復使用git reflog這表明我的那些文件 我第一次提交的HEAD @ 1,我恢復與git reset --hard "[email protected]{5}"我的文件


什麼可能使他們從刪除的文件另一個用戶的本地文件系統?

請注意,有一個similar question詢問如何在發生這種情況時取消刪除文件。所以這種情況發生,人們正在丟失他們的文件。

+0

難道事件刪除*未跟蹤*文件?我問,因爲有多種合併策略可用於git,並且由於您現在正處於合併衝突的中間,如果git認爲處理衝突的最佳方式是嘗試合併其他方式,它可能會已經從本地遠程檢出變更集,並試圖合併到該變更集上。這樣看起來文件被刪除,但實際上你仍然處於合併衝突的中間。另外,rebase會一次一個地重放變更集,這可能可以解釋這一點。 –

+0

這些是被跟蹤的文件。他們一直在犯。我會更新這個問題。 –

+0

@ LasseV.Karlsen這將是有趣的創造可能導致混帳使用這種反向合併策略文件...我看到你關於衍合點爲好,但在這種情況下,我相信,只有一個單一的從提交造成在github repo上使用README + .gitignore的git init。 –

回答

0

我不能評論,因爲低迴購,但我今天早上安裝wordpress並做到了這一點。

git init 
git add . 
git commit -m "initial commit" 

在這一點上,我已經意識到我已經創建了它的GitHub頁面,它有一個默認的自述文件。

所以,不知道這會是一個問題,我試圖將作爲

git remote add origin http://github.com/user/repo.git 
git push -u origin master 

這是我收到的消息:

$ git push -u origin master 
To https://github.com/user/project.com 
! [rejected]  master -> master (fetch first) 
error: failed to push some refs to 'https://github.com/user/project.com' 
hint: Updates were rejected because the remote contains work that you do 
hint: not have locally. This is usually caused by another repository pushing 
hint: to the same ref. You may want to first integrate the remote changes 
hint: (e.g., 'git pull ...') before pushing again. 
hint: See the 'Note about fast-forwards' in 'git push --help' for details. 

所以,與其力推和擦除該在github上README文件,我沒有git pull --rebase和git向我展示了這條消息

First, rewinding head to replay your work on top of it... 

我等了大約5分鐘,之後我ctrl+C退出了這個過程,並且意識到從wordpress站點中刪除了大約8-9個文件。 git status也向我顯示了刪除的文件。

我能夠恢復使用git reflog這表明我的那些文件我第一次提交的HEAD @ 1,我收回我的文件與git reset --hard "[email protected]{5}"

+0

您好我可以這不會開始賞金。我將你的答案複製到我的問題中......你現在想刪除你的答案嗎? –

相關問題