问题 1.使用pull后没有将远程文件下载来 可能是本地和远程分支搞反了
也可以使用fetch然后merge,
如果提示fatal: refusing to merge unrelated histories,就使用:
1 2 3 4 5 6 当在Git中执行git merge命令时,出现"fatal: refusing to merge unrelated histories"错误提示,这通常是因为要合并的两个分支没有共同的提交历史,被认为是不相关的分支。 这种情况通常发生在两个分支之间没有共同的祖先提交,或者其中一个分支是在完全不同的代码库中创建的。 如果你确定要合并这两个不相关的分支,可以在git merge命令后添加--allow-unrelated-histories选项来允许合并不相关的历史。例如: git merge branch1 --allow-unrelated-histories
然后将fetch的分支合并到q_2:
git checkout q_2
git branch -a:
1 2 3 master * q_2 remotes/r1/qt_cut_test_2
git merge remotes/r1/qt_cut_test_2
然后就可以看到远程的文件了。
2.使用git pull -f r1 远程:本地 这样远程的文件就会将本地的文件覆盖掉。
如何恢复呢?
首先使用git reflog查看提交信息:
1 2 3 4 5 6 7 8 9 10 11 $ git reflog 2ae4d38 (HEAD, qt_cut_test_2) HEAD@{0}: checkout: moving from qt_cut_test_2 to 2ae4d38 2ae4d38 (HEAD, qt_cut_test_2) HEAD@{1}: reset: moving to 2ae4d38 fe8c64a (master) HEAD@{2}: reset: moving to fe8c64a 2ae4d38 (HEAD, qt_cut_test_2) HEAD@{3}: reset: moving to 2ae4d38 cc8f420 (r1/qt_cut_test_2) HEAD@{4}: checkout: moving from master to qt_cut_test_2 fe8c64a (master) HEAD@{5}: checkout: moving from qt_cut_test_2 to master cc8f420 (r1/qt_cut_test_2) HEAD@{6}: pull -f r1 qt_cut_test_2:qt_cut_test_2: forced-update 2ae4d38 (HEAD, qt_cut_test_2) HEAD@{7}: commit: qt_1 fe8c64a (master) HEAD@{8}: checkout: moving from master to qt_cut_test_2 fe8c64a (master) HEAD@{9}: commit (initial): master_c_1
第一列类似2ae4d38 是类似id。然后发现我是再commit qt_1之后使用了pull -f强制拉取了分支导致覆盖了本地分支文件。id是2ae4d38
然后使用git reset 后打印:
1 2 3 4 5 Unstaged changes after reset: D cut_test_2.pro D cut_test_2.pro.user D cutoptions.cpp ...
然后尝试使用 git checkout –cut_test_2.pro 发现文件恢复了。
然后使用git checkout –*.h 就可以恢复所有.h后缀的文件,然后将所有文件依次恢复。
还好之前使用git add –all 并且commit了,不然可能九回复不了了,因为没有保存信息。
以后使用类似这种危险操作一定要备份文件。
完整流程 经过测试,之前出现那么多问题是因为pull的时候远程和本地分支搞反了
正确流程:
git init
git remote add r1 …
git remote -v
git add …
git commit -m …
git branch -a
git pull r1远程:master
git branch -a //一个master,一个远程
git checkout master
git merge 远程 –allow-unrelated-histories
git push master:远程