【1】常见问题
① Git :fatal: refusing to merge unrelated histories解决
两个分支是两个不同的版本,具有不同的提交历史。如果想允许不相关历史提,强制合并,如下命令所示:
git pull origin master --allow-unrelated-histories
② Git强制覆盖远程/本地文件
强制覆盖远程文件:
git push origin 分支名 --force
强制覆盖本地文件
git fetch --all git reset --hard origin/master git pull
git 拉取命令(pull)的标准格式是:
git pull <远程主机名> <远程分支名>:<本地分支名>
可简写为:
git pull
如果只是想放弃本地的临时提交,强制将远程仓库的代码覆盖到本地分支,可如下所示:
git pull --force <远程主机名> <远程分支名>:<本地分支名> # git pull --force origin master:master
git pull origin master --allow-unrelated-histories
③ Git克隆使用用户名密码
git clone http://邮箱(或用户名):密码@仓库 #git clone http://jane:123456@test.git
注意: 邮箱中的 @ 要使用 %40
代替。仓库 URL 不需要 http://
。
④ 分支操作
查看本地分支
git branch -v * master b0c1c50 @task_111
*
表示位于当前的分支。
查看远程和本地分支
$ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/master
查看远程分支
$ git branch -r origin/HEAD -> origin/master origin/bjdev origin/master
创建分支
git branch [分支名]
切换分支
git checkout [分支名]
推送本地分支到远程
git push -u origin develop:develop 推送本地develop分支到远程develop分支
建立本地至远程分支的链接(以提交代码)
git branch --set-upstream-to=origin/develop
取消对develop分支的跟踪
git branch --unset-upstream develop
删除远程分支
#推送一个空分支到远程等效于删除 $ git push origin :[远程分支名] 也可以使用: $ git push origin --delete [远程分支名]
删除本地分支
git branch -d <your branch name> 或 git branch --delete <your branch name>
强制删除本地分支
// 不会检查当前要删除的分支是否存在未处理的状态 git branch -D <your branch name> 或 git branch --delete --force <your branch name>
合并分支到当前分支
git merge [即将被合并的分支名]
⑥ git回退到某个commit
这里场景是回退到目标版本,目标版本之后的版本都不要了。主要针对于某些同学误提交导致线上版本错误。
查看提交历史及提交的commit_id
git log
回退命令:
$ git reset --hard HEAD^ 回退到上个版本 $ git reset --hard HEAD~3 回退到前3次提交之前,以此类推,回退到n次提交之前 $ git reset --hard commit_id 退到/进到 指定commit的sha码 --soft 不删除工作空间的改动代码 ,撤销commit,不撤销git add file --hard 删除工作空间的改动代码,撤销commit且撤销add
强推到远程:
此时如果用“git push”
会报错,因为我们本地库HEAD指向的版本比远程库的要旧。所以我们要使用强制push:
$ git push origin HEAD --force
设置远程URL为ssh
git remote set-url origin ssh://git@ip:port//xxxx
⑦ 关闭Git对文件格式的自动转换
关闭git对文件换行符的修改,如自动把CRLF换成LF等
git config --global core.autocrlf false
比如shell脚本,从Git下载到本地windows环境时,可能格式会变为DOS。这时使用上面的配置就避免了这种情况。
⑧ 查看并修改账户密码
# 查看用户名 git config user.name # 查看密码 git config user.password # 查看邮箱 git config user.email # 查看配置信息 可以详细列出各种配置项 git config --list # 修改用户名 git config --global user.name "xxxx(新的用户名)" # 修改密码 git config --global user.password "xxxx(新的密码)" # 修改邮箱 git config --global user.email "xxxx@xxx.com(新的邮箱)"
通过修改文件来修改信息:
如下命令可以打开文件进行编辑,然后保存即可
git config --global --edit
【2】撤销相关操作
① 误Add文件到暂存区进行撤销
误操作把文件比如./idea/XXX
进行add,提示使用命令git status
提示如下:
解决:可以使用命令git reset HEAD <file>
来移除暂存区。实例如下
#可以使用通配符哦 git reset HEAD *.gitignore git reset HEAD ordermng/.idea/* git reset HEAD v1.text
git reset HEAD
会把暂存区恢复成HEAD
git reset --hard HEAD
命令 会将工作区和暂存区恢复成HEAD
【3】设置ssh
① 本地生成key
windows下打开git bash,然后如下操作:
cd ~/ .ssh #XXX@YY.com用来进行标记 sudo ssh-keygen -t rsa -C "XXX@YY.com" 然后默认回车回车即可
类型可以用 -t 选项指定。如果没有指定则默认生成用于SSH-2的RSA密钥。这里使用的是rsa。
同时在密钥中有一个注释字段,用-C来指定所指定的注释,可以方便用户标识这个密钥,指出密钥的用途或其他有用的信息。所以在这里输入自己的邮箱或者其他都行。
② 设置URL方式为ssh
git remote set-url origin ssh://git@ip:port/XXXX.git
使用ssh方式进行clone
git clone ssh://git@ip:port/XXXX.git
③ Git进行全局配置
git config --global http.postBuffer 524288000 git config --global http.postbuffer 2097152000 git config --global http.lowspeedlimit 0 git config --global http.lowspeedtime 999999 git config --global http.maxrequestbuffer 2097152000
【4】合并A分支的某个commit到B分支
这里应用命令是 git cherry-pick
。
A分支操作:
git checkout A git log
找到某个提交的commit ID,或者在idea 右键上次提交的记录 copy reversion number 。
这里假设获取到的是:8001e36b
B分支操作:
git checkout B git cherry-pick 8001e36b git push