初始化、提交代码到远程仓库
正常情况下,用户名、密码全局设置一次就可以,使用较少【略过】,如有需要自行百度
新建一个工程,想提交到远程仓库【远程仓库也没有】
如下步骤可实现提交到远程仓库
# 1.初始化
git init
# 2.添加所有文件到本地仓库
git add .
# 3.提交到本地仓库(备注自行修改)
git commit -m "init"
# 4.新建远程仓库
git remote add origin https://git仓库地址/分组名/仓库名.git
# 示例: git remote add origin https://github.com/xx-group/first-project.git
# 5. push到远程仓库
git push origin master
注意事项:执行4、5步时一定要注意网络通常,否则会出现失败、提交卡死到情况
如果出现git push卡死(writing objects、pushing...),按ctrl+c结束提交。找到网络通畅的地方。在idea的Terminal窗口,键入git gc并回车,重新执行第5步
上述全部完成后,已经有master分支了,
切换分支并创建远程分支(当然可以用idea操作,此处是复习git命令)
# 会创建新的test分支
git checkout -b test
# 再提交到远程仓库到test(还没有test分支)
git push origin test
上述命令在远程已经创建了test分支
# 更新代码
git fetch
可以看到已经出现了origin/test分支
若想新建dev分支,可采取相同的方法(上述新建test分支)
上述第4步执行报错,提示仓库不存在,则在github上新建仓库。
再执行
git pull --rebase origin master
最后执行
git push -u origin master
原因是本地仓库和远程仓库没有关联!!
使用git指令打tag
1.查看当前本地tag
// 查看本地所有tag
git tag
2.新建一个tag(未推送到远程仓库)
// 指令:
git tag -a tag名称 -m 'tag描述'
// 示例:
git tag -a v1.0.20200810152400 -m '1.0版本tag'
3.提交tag到远程仓库
git push origin --tags
4.删除tag
// 删除本地tag
git tag -d v1.0.20200810152400
// 提交远程覆盖删除
git push origin --tags
或
git push origin --delete tag 'v1.0.20200810152400'
补充知识:
若提交时没有.gitignore文件,提交了一推没用的文件(.idea/*,target/*),那怎么删除远程仓库的昵?以下步骤可完成删除
// 1.删除idea文件及里面所有文件
git rm -rf .idea/
// 2.提交到本地仓库
git commit -m "delete file"
// 3.push到远程仓库
git push origin master
从历史提交中检出新分支
方案一
步骤:
1.查询历史提交ID
2.基于历史提交检出新分支
3.分支检出后正常操作(修改、提交到远程等等)
实操:
1.查询历史提交id
方法一通过指令: git log
方法二通过idea:
2.检出分支,完成
git checkout -b 分支名 历史提交ID
示例:
git checkout -b v1.0 dcddaf590fe6a97b05d13014d8eca3b0d3a90611
历史提交ID输入前8位即可(已经复制就粘贴全部)
方案二
使用idea,默认已经打开了项目
点击下方Version Control -> Log
查看和设置用户名密码
说明:用户名和邮箱地址是本地git客户端的一个变量,不随git库而改变。
每次commit都会用用户名和邮箱记录。
github的contributions统计就是按邮箱来统计的。
2.修改密码(请自行验证)
git config --global credential.helper store (输入这个命令后,以后只要在输入一次用户名密码)
3.查看用户名和邮箱地址
git config user.name
git config user.email
4.修改用户名和邮箱地址:
git config --global user.name "username"
git config --global user.email "email"
常见错误及解决办法
5.git clone 拉取代码报错 repository 'http://xxxx.xx.xx.git' -- not found.
出现这种情况,本地已经保存了对应的账号密码,对于当前操作权限不匹配;解决方案:拉取代码时添加具有权限的账号密码:
格式如下:
错误信息:repository 'http://远程仓库的域名或者IP/xxx/xxx.git' not found
执行git指令:git clone http://username:password@远程仓库的域名或者IP/xxx/xxx.git
示例:
错误信息: repository 'http://gitlab-vpc.test.com/test-group/test.git' not found
对应gitlab账号密码分别为:root 和 123456
则执行git的指令为:git clone http://root:123456@gitlab-vpc.test.com/test-group/test.git
6.将拉下来的代码推到新仓库
6.1设置新的仓库url(注意:确保已经添加了公钥到新的机器上)
指令:git remote set-url origin 新gitlab地址
示例:git remote set-url origin http://gitlab-vpc.new-test.com/test-group/test.git
6.2将当前分支推到新仓库
特别提醒:建议使用新仓库没有的分支名(使用新仓库没有的分支名不会有以下错误)
指令:git push origin 分支名
示例: git push origin dev
如果推送报错“提示找不到refs...”,原因是本地和远程仓库不匹配,进行强制推送,指令改为
git push -f origin 分支名
示例:
git push -f origin dev
7.push到新仓库的代码合并代码时遇到合并失败报错:refusing to merge unrelated histories
背景: 拉取新push上去的分支(例如dev),然后merge旧分支(master)到新分支报错refusing to merge unrelated histories
解决办法:当前处于新分支(dev),执行拉取旧分支(master)分支代码时,加上参数 --allow-unrelated-histories
git pull origin 分支名 --allow-unrelated-histories
示例:
git pull origin master --allow-unrelated-histories
有冲突解决掉,没有冲突表示已经拉取成功完成了
git pull 相当于git fetch和git merge的组成
最后再push即可
8.报错 The project you were looking for could not be found解决
(背景:mac重装系统后,登陆同一个ID,同步了钥匙串,之前保存了同样的git账号信息导致报错)
原因:重复保存账号密码导致报错
解决办法:删除之前保存的账号(有说在执行clone时带上账号信息,我觉得太麻烦。故采取删除之前保存的账号)
以mac本为例
8.1打开“钥匙串”找到如下git地址,本机有2个地址,直接删除(另外:如果IntelliJ开头的钥匙串也保存了git账号密码同样也删除 )
8.2删除的方法是“右键”->选择“删除xxxxxxxx"
用idea分别打开2个git的任意一个项目,在当前项目下执行任意指令(clone、fetch、pull、push、merge等)按照提示重新输入账号密码即可重新保存。
9.出现以下错误
----------------
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'xxxxxxx'
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
-------------
解决:git branch --set-upstream-to origin/master master
意思是将本地master分支和远程master关联起来
类似的可以用git branch --set-upstream-to origin/dev dev
VickdeMacBook-Pro:vick$ git branch --set-upstream-to origin/master master
Branch 'master' set up to track remote branch 'master' from 'origin'.
再次推送,如果仍失败参照上述第7步解决即可
10. Failed to connect to xxxxx:xxxx Operation timed out
异常背景:公司搭建的gitlab,由于种种原因IP地址变动了,不得已执行git remote set-url origin xxxxxx,然后提示Failed to connect to xxx:xxx Operation timed out
解决方法:执行git remote -v,将结果在浏览器中打开,如果打开异常,则检查路径是否错误
如果打开正常,则可能是idea做了代理或缓存,关闭idea重新打开,再次操作即可