一、git全局配置
git全局配置文件.gitconfig 默认目录是系统用户文件夹下,Win系统可运行%USERPROFILE%查找,Mac系统cd ~查找;
git初始使用时都需要进行user的配置,包括用户名和邮箱的配置
$ git config --global user.name "name" #修改提交名
$ git config --global user.email “email” #修改邮箱,会写入到公钥中
$ git config --global --list # 查看全局配置
如果不加–global 修改的是当前项目git配置
二、git密钥配置–以SSH全局配置密钥
1 检查SSH Key是否存在
$ cd ~/.ssh # 查看用户根目录下.ssh文件夹
$ ls #存在id_rsa.pub 或 id_dsa.pub 文件
2 创建SSH Key
$ ssh-keygen -t rsa -C "[email protected]" # 此email可任意,不一定要gitLab登录邮箱
3 查看SSH Key
$ cat ~/.ssh/id_rsa.pub #copy公钥内容到gitLab里,添加进去。
4 测试SSH Key
$ ssh -T "[email protected]"
5 配置多个网站ssh密钥
在生成每个网站ssh-key时,自定义名称不要一样,然后在~/.ssh目录下新建一个config文件,然后配置多个网站的ssh信息,内容如下:
# gitLab
Host dev.gitLab.com
HostName dev.gitLab.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
# phabricator
Host 192.168.1.5
HostName 192.168.1.5
Port 22
PreferredAuthentications publickey
IdentityFile ~/.ssh/phabricator
三、git常用命令
1仓库管理
$ git init #初始化,操作后当前目录下会生成.git隐藏文件夹
$ git remote add origin http://dev.github.com:9800/root/front.git #添加仓库地址
$ git remote set-url origin http://dev.github.com:9800/root/front.git # 修改仓库地址
$ git remote set-url --add origin http://dev.github.com:9800/root/front.git #添加多个远程仓库
# 切换http(s)/ssh方式:
$ git remote rm origin
$ git remote add origin "git远程地址"
$ git push origin
$ git remote -v # 查看当前仓库地址
$ git clone http://dev.github.com:9800/root/front.git # 创建本地仓库,会在当前目录下自动生成front的仓库目录,如果自定义文件夹名,后面空格后加上名称
2 分支管理
- 查看分支
$ git branch # 查看本地分支
$ git branch -r # 查看远端分支
$ git branch -a # 查看所有分支
$ git branch -vv # 查看分支状态
- 创建分支
$ git branch <branch> <origin-branch> # 创建本地分支,并关联远端
$ git commit -b <branch> <origin-branch> # 创建本地分支并立即切换过去
$ git push origin -u <branch>:<origin-branch> # -u:创建远程分支并关联,origin-branch不用带origin/路径
- 切换分支
$ git commit <branch> # 切换分支
$ git fetch # 切换到游离分支(不在任何分支)
$ git commit FETCH_HEAD
-
合并分支
$ git merge <branch> --no-ff # 合并本地分支 --no-ff:关闭Fast-Foward合并,这样可以生成merge提交,保留分支合并信息
#合并远端本地(不用先checkout到本地):
$ git fetch # 先更新远程仓库所有分支上最新commit-id到本地 $ git merge origin/<branch> --no-ff # 再从远端merge,无需先拉取到本地 $ git merge --abort # 取消合并
# 合并冲突处理:
$ git mergetool # 如果在~/.gitconfig下正确配置了比较工具,会依次弹出比较窗口,处理后保存 $ git clean -nfd # 查看不在版本库中合并文件,以.org结尾 $ git clean -fd # 确认无误后,移除这个.org临时文件 $ git add -A $ git merge --continue # 继续完成merge流程
-
修改分支
$ git branch -m <branchName> #修改分支名称 $ git branch --set-upstream-to <origin-branch> # 修改当前分支远端关联 $ git branch --set-upstream <branch> <origin-branch> #修改指定分支远端关联
-
删除分支
$ git branch -d <branch>#删除本地分支 $ git branch -D <branch> # 强制删除,未被合并的分支被删除的时候需要强制 $ git br | grep <branch> | xargs git branch -d #批量删除本地分支:
# 删除远端分支:
扫描二维码关注公众号,回复: 11445789 查看本文章$ git push origin --delete <branch> # 或: $ git push origin :<branch> # 推送一个空分支到远端,即删除
-
更新分支
$ git fetch -p # 从远端拉取最新的分支信息,更新本地缓存,更新被删除的分支
3 查看管理
$ git status # 查看当前工作状态
$ git log # 查看全部提交记录
$ git diff <commit-id1> <commit-id2> # 比较两次提交之间的差异
$ git reflog # 查看历史操作记录
4 操作管理
-
更新
$ git pull --no-ff # 非快进更新 $ git pull --rebase # 基于rebase的避免产生无用的合并信息
# 解决rebase冲突方法:
$ git add -A # 强制添加到 $ git rebase --continue $ git push
# 临时更新:
$ git stash # 先放入暂存区 $ git pull $ git stash pop # 恢复显示工作内容,或用git stash apply stash@{n}挑选恢复哪个
#管理暂存:
$ git stash list # 显示暂存列表 $ git stash clear # 清除暂存列表
-
提交
#多个修改,只提交部分:$ git add <file1> <file2> # 只添加要提交的到本地暂存区 $ git commit -m 'commit info' # -m处不加a $ git push
#提交全部:
$ git add . # 有新文件时,一定要 $ git commit -am 'commit info' $ git push
#追加提交:(未push到远端)
将最近一次的变更追加到最新的提交,同时也可以编辑提交信息,不产生新的提交记录。$ git commit --amend # 如果已push到远端,不建议追加,容易跟自己冲突 $ git push
#提交时绕过pre-commit验证:
$ git commit -am 'commit info' --no-verify
git clone时出现问题及解决
1、出现“Please make sure you have the correct access rights and the repository exists.”问题
原因: git服务器没有存储本地ssh密钥
解决方法:
- 直接删除.ssh文件夹中的known_hosts文件
- 重新生成SSH Key
- 复制id_rsa.pub的内容,登陆到github账户,setting中粘贴到key中,Add SSH Key
- ssh -T [email protected]
- git clone 成功
2、“The authenticity of host ‘git.jd.com (172.20.39.31)’ can’t be establiyesd.”问题
原因: 缺少know_host文件,git生成.ssh/下三个文件,id_rsa id_rsa.pub和know_host,
解决方法: 修改 /etc/ssh/ssh_config 文件的配置
在文件最后面添加以下两行内容:
StrictHostKeyChecking no
UserKnownHostsFile /dev/null