git 常用小操作
更新本地仓库的远程地址【remote】
如果远程仓库的地址更新了,我们本地仓库就需要更新 remote 地址
查看本地绑定的远程地址
git remote -v
orcat .git/config
先删除后添加
git remote rm origin
andgit remote add origin git@gitee.com/xxx.git
直接更新
- HTTPS 协议
git remote set-url origin https://gitee.com/xxx.git
- SSH 协议
git remote set-url origin git@gitee.com:UncleYong/javaAutoTest.git
忽略已经被跟踪的文件
初始化仓库的时候,如果 gitignore 文件中没有添加忽略的文件或目录,默认情况下,目录里所有文件都是被存入本地仓库中的,这个时候再写入 gitignore 文件的被跟踪文件或目录,是不会被忽略的。所以,对于已经被存入仓库的文件是没办法通过 gitignore 取消的。
先从本地仓库中取消对该文件的跟踪
git rm -r --cached filename
最后 filename 加入 gitignore,再重新提交就生效了。
使用 git pull “fatal: 拒绝合并无关的历史”
小概率事件吧,一般产生是因为本地仓库版本和远程版本不一致导致的,我来说一下我遇到这个问题的原因:电脑重置,我事先把项目拷贝到 u 盘,当然 git 仓库太沉重就过滤掉了。
然后新系统好了之后就把 u 盘里的项目代码切回来了,重新初始化本地仓库,remote 添加远程地址,然后,尝试拉取上传代码,然后就复现了这个问题,其实这个”fatal: 拒绝合并无关的历史”错误也好解决,如果仓库就是你自己维护,那么强制提交就可以了:git push origin master --force
当前我不想,主要是发现了问题想知道怎么解决。
很好理解,版本不同是因为我这个本地的仓库历史记录是新的,和线上那个根本不是一个频道,那么怎么解决呢,百度一下找到了解决办法
解决问题的代码
git pull origin master --allow-unrelated-histories
然后无论 push 还是 pull 都 ok 了。
问题代码复现
- 初始本地仓库
git init
git add .
git commit "提交说明"
- 连接远程主机:
git remote add origin 远程仓库地址
- push 到远程仓库:
git push origin master
- 报错
MacBook-Pro:~/go/src/demo/open$ git push -u origin master
To codehub.devcloud.huaweicloud.com:t00001/open.git
! [rejected] master -> master (non-fast-forward)
error: 推送一些引用到 'git@codehub.devcloud:Openxt00001/open.git' 失败
提示:更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支。
提示:再次推送前,先与远程变更合并(如 'git pull ...')。详见
提示:'git push --help' 中的 'Note about fast-forwards' 小节。
- 提示先拉取更新
MacBook-Pro:~/go/src/demo/open$ git pull origin master
来自 codehub.devcloud.enxt00001/open
* branch master -> FETCH_HEAD
fatal: 拒绝合并无关的历史
解决方法:
在拉取时使用以下命令:git pull origin master --allow-unrelated-histories
官方解释
By default, git merge command refuses to merge histories that do not share a common ancestor. This option can be used to override this safety when merging histories of two projects that started their lives independently. As that is a very rare occasion, no configuration variable to enable this by default exists and will not be added.
默认情况下,git 合并命令拒绝合并没有共同祖先的历史。当两个项目的历史独立地开始时,这个选项可以被用来覆盖这个安全。由于这是一个非常少见的情况,因此没有默认存在的配置变量,也不会添加。最后再执行
git push origin master