目前整理了本人在工作学习中经常用到的git指令,可能不全,后续补充
1. 概念
git可以分成三个阶段
working tree
:就是你所工作在的目录,每当你在代码中进行了修改,working tree
的状态就改变了。index file
:是索引文件,它是连接working tree
和commit
的桥梁,每当我们使用git-add命令来登记后,
index file的内容就改变了,此时index file就和working tree
同步了。commit
:只有commit
了,我们的代码才真正进入了git
仓库。
我们使用git commit
就是将index file
里的内容提交到commit
中。
2. 基础配置
git --version 查看版本信息
git config --global user.name “xxxxx” 配置用户名
git config --global user.email xxxxx@qq.com 配置邮箱
git config --list 查看配置结果
git config --global core.autocrlf false 让git不要管windows/unix换行符转换的问题
git config --global core.ignorecase false windows上还需配置
3. 密钥配置
ssh-keygen -t rsa -C 123@qq.com]
一路回车,不用输入任何密码 生成ssh key pair
ssh-add ~/.ssh/id_rsa
将key添加到ssh客户端
如果出现could not open a connection…的错误
先执行eval ssh-agent,在执行ssh-add ~/.ssh/rsa成功ssh-add -l就有新加的rsa了
cat ~/.ssh/id_rsa.pub
查看公钥
同一个电脑配置多个 ssh-key
-
生成key
$ ssh-keygen -t rsa -C "xxxxxxx@qq.com" -f "~/.ssh/github_id_rsa"
$ ssh-keygen -t rsa -C "xxxxxxx@qq.com" -f "~/.ssh/gitee_id_rsa"
也可以在提示Enter file in which to save the key
时手动输入文件地址
如果提示文件夹或文件不存在,使用全路径/Users/terminus/.ssh/gitee_id_rsa
-
`cat ~/.ssh/github_id_rsa.pub`` 查看公钥并添加到网站
-
vim ~/.ssh/config
# gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitee_id_rsa
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsa
- 测试
执行ssh -T git@github.com
成功则返回Welcome to Gitee.com ,yourname!
执行ssh -T git@gitee.com
成功则返回Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.
Macos在~/.ssh
下新建config文件无效
真正的配置文件为/etc/ssh/ssh_config
添加密钥文件位置
IdentityFile ~/.ssh/gitee_id_rsa
IdentityFile ~/.ssh/gitlab_id_rsa
4. 指令操作
4.1 基本操作
git add 文件名
把文件修改添加到暂存区
git commit -m 'xxx'
把暂存区的所有内容提交到当前分支
-ma 将add和commit两步合并为一步
git branch -r
查看所有的远程分支
git branch -vv
查看本地分支和远程分支的映射关系
git remote -v
查看远程库信息
git remote remove origin
删除远程地址
git remote add dice https://github.com/xxx
添加远程地址
如果git push出错The current branch xxx has no upstream branch.
原因是本地分支没有和远程分支关联
git push --set-upstream dice 分支名
关联本地分支和远程分支
git branch --unset-upstream
撤销本地分支与远程分支的映射关系
git checkout -b branch-name dice/branch-name
在本地创建和远程分支对应的分支
git log
显示日志,’ --pretty=oneline’显示内容较少
git reflog
查看提交历史(可以看到删除的commit_id)
git log --graph
分支合并图
git reset --hard HEAD^1
回退到当前版本的上一个版本(HEAD指针指向当前版本)
git reset --hard commit_id
根据id回退到某个版本
git clone url
克隆远程仓库的项目(主分支)到本地
git clone -b 分支名 url
克隆远程仓库指定分支
git checkout -b dev
创建dev分支并切换
-b参数表示创建并切换 ,该命令相当于两条命令git branch dev和git checkout dev
git branch
查看当前分支(当前分支前会有一个*号)
git checkout 分支名
切换分支
4.2 git diff 查看文本区别
git diff
查看working tree(工作区)与index file(暂存区)的差别的。
git diff --cached
查看index file与commit的差别的。
git diff HEAD
查看working tree和commit的差别的。(HEAD代表的是最近的一次commit的信息)
git diff -w
消除 No newline at end of file提示,每一个文件最后一句一回车换行结束
git merge dev -m ''
合并dev分支的信息到当前分支(默认使用fast forward模式,但是合并后会丢掉分支信息)
–no-ff 关闭forward模式,以普通模式合并(普通模式合并后的历史有分支,能看出来做过合并)
4.3 stash工作现场
不需要git commit切换到另外一个分支,暂时存储当前分支的未提交内容
git stash
保存当前的工作现场
git stash list
查看工作现场列表
git stash apply
恢复工作现场,但是恢复后,stash内容并不删除,需要 用git stash drop来删除
git stash apply stash@{0}
指定列表中项
git stash pop
恢复的同时删除stash的内容
git stash clear
清空stash列表
git stash show
显示做了哪些改动,默认show第一个存储
如果要显示其他存存储,后面加上stash@{$num},参考git stash apply
git stash save -m 'commen'
给某一次存储添加备注
5. 常见问题
5.1 修改git的远程地址
git remote set-url origin http://git.erp.ocj.com.cn:9000/ocj/platform/inventorycenter
5.2 修改未 push 和已经 push 的注释信息
-
修改还未 push 的注释:
git commit --amend
修改后保存退出即可。 -
修改 push 到远端还没有人其他人下载或改动的注释:
git commit --amend
进入修改页面修改注释信息,修改后:wq保存退出。
git push --force-with-lease origin master
使用命令push到远程即可 -
修改已被其他人下载或改动的注释:
git fetch origin
git reset --hard origin/master
5.3 基于当前分支建立新分支,初始版本以当前分支为准
git checkout –b v1.0
生成新的分支v1.0并切换(v1.0所有文件与当前分支一样)
git push --set-upstream origin v1.0
推送分支到远程仓库(远程没有该分支自动创建)