git远程端和本地端强制整合 清空历史

问题

遇到这么一种情况,远程端进行过一些操作,有自己的log。
然后我将这个远程端里面的内容全部清空了,想拿来给新的本地端用。
此时新的本地端进行以下操作。
git remote add xxx url

  • 我想试试直接push可以不
    • 不可以,他会说不同步
  • 于是用git pull xxx master
    • 报错:fatal: refusing to merge unrelated histories
  • 于是git pull origin master --allow-unrelated-histories
    这样以后就会强行将不同的log拼接在一起,log根据时间排序。

注意

因为远程是什么都没有的,只有历史记录而已,所以我直接拉下来没有什么问题。
之前遇到过一个情况,我直接将远程拉下来,把我本地也搞得一塌糊涂,根本用不了。本地的log也直接变成远程的了。
所以记得本地要先备份一下。我也不知道该怎么解决,以后碰到再看。

疑惑

 * [new branch]      master     -> origin/master
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> master

它有给我一个提示,就是--set-upstream,确定要上流分支,我也还不大清楚应该具体应用在什么情况,希望以后有确切的例子以后再记录一下。
但是比如我git push origin master不是已经确定了上流分支了嘛,git pull也是同理吧?
还有一种

fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin master

其实应该就是字面意思,有时候是需要确定上流分支的。git的提示还是很全面的。多注意提示,再对症下药。

这样就可以


清空历史

远程端因为删删改改存了很多没有必要的历史,所以想将其清空

git checkout --orphan new       //关键在这!孤儿!他会创建一个没有任何历史记录的分支,所以切换后一定要commit一次
git add .                       //!!①
git commit -m "init"            //!!②
git branch -D master            //!!③
git branch -m master            //将本分支改名为master
git push -f origin master       //!!④

网上一堆差不多的关于git add -A 和git add . 之间的关系等。
统一都在说,git add . 不能add删除后的文件。然而我实践了一下,是可以的
也有可能是我误解了,没明白他们的意思。

有什么commit -am...
总之个人习惯是git add .再git commit -m

好像都说-d 和-D 是一样的,但是看图。

如图

此时需要去git Lab的setting里的repository中找到protected branch取消保护就行了

posted @ 2021-02-04 18:47  lwxx  阅读(160)  评论(0)    收藏  举报