我想重現由於我對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詢問如何在發生這種情況時取消刪除文件。所以這種情況發生,人們正在丟失他們的文件。
難道事件刪除*未跟蹤*文件?我問,因爲有多種合併策略可用於git,並且由於您現在正處於合併衝突的中間,如果git認爲處理衝突的最佳方式是嘗試合併其他方式,它可能會已經從本地遠程檢出變更集,並試圖合併到該變更集上。這樣看起來文件被刪除,但實際上你仍然處於合併衝突的中間。另外,rebase會一次一個地重放變更集,這可能可以解釋這一點。 –
這些是被跟蹤的文件。他們一直在犯。我會更新這個問題。 –
@ LasseV.Karlsen這將是有趣的創造可能導致混帳使用這種反向合併策略文件...我看到你關於衍合點爲好,但在這種情況下,我相信,只有一個單一的從提交造成在github repo上使用README + .gitignore的git init。 –