git命令

生成SSH

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
git init
# 初始化本地git版本库(创建新仓库)

git config --global user.name "xxx"
# 配置用户名

git config --global user.email "xxx@xxx.com"
# 配置邮件

git config --list
#查看当前配置列表

ssh-keygen -t rsa -C "xxx@xxx.com"
#敲三次回车,在~/.ssh/目录下生产公钥和私钥文件

git clone <url>
# clone远程仓库

修改、提交、删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
git add index.php
# 添加index.php文件到缓存区
git add .
# 添加所有改动过的文件到缓存区
git add --all
# 添加所有文件到缓存区

git commit
# 提交缓存区内的文件(回车后需要键入描述:wq保存退出)
git commit -m "描述"
# 提交缓存区内的文件,并提供描述

git commit -am '描述'
# 将add和commit合为一步
git commit --amend -m 'xxx'
git push --force
# 合并最后一次提交(用于反复修改)

git rm index.php
# 删除index.php文件
git rm --cached index.php
# 将index.php文件移出缓存区,但不删除( -r * 递归目录)
git rm -f 1.html
# 将缓存区中的1.html文件移出并删除

git 回退到指定版本

1
2
3
4

git reset --hard xxx(历史版本号)
git log 查看版本
git push --force 强制推送

查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
git status
# 查看当前版本状态(是否修改)

git diff
# 查看所有添加到缓存区的变更(工作区与版本库的区别)
git diff index.php
# 查看工作区文件和库文件区别
git diff --cached
# 查看所有已添加到缓存区,但还未commit的变更(缓存区与版本库的区别)

git checkout dev
git diff master
# show dev branch diff master branch

git log
# 查看提交历史
git log --oneline
# 以简短的方式查看提交日志
git log -3
# 查看最近3次的提交日志
git reflog
# 行为日志,显示所有提交,回滚等..
git ls-files
# 显示缓存区的所有文件
git log --graph
# 查看日志图形化

tag 标签操作

1
2
3
4
5

git checkout test
git tag v1.0
git tag # 查看标签
git push origin v1.0 #推送标签v1.0到远程

branch 分支操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
git pull origin master
# 获取远程分支master并merge到当前分支

git branch -vv
# 查看本地分支和远程分支是否建立连接

git branch
# 显示本地分支
git branch -r #查看远程分支

git push orgin <branch-name> #推送本地分支到远端

git checkout <branch-name> #切换分支

git checkout - #切换到上一个分支



git branch -a
# 显示所有分支
git checkout 分支名/标签名
# 切换到指定分支或标签

git branch 分支名
# 新建分支
git branch -d 分支名
# 删除本地分支 -D 强制删除

git stash 保存当前进度 。 分别对暂别区和工作区的状态进行保持
git stash list
git stash pop
git stash clear

cherry-pick

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
场景:将master 提交中的ab73c32 提取出到分支:1.6.0-release中

git checkout 1.6.0-release
git chrry-pick ab73c32
git push orgin 1.6.0-release

如果发生冲突:
git - resolve conflict 手动解决冲突

执行: git cherry-pick --continue

放弃本地修改,保持和线上一致

git fetch --all
git reset --hard origin/master
git clean -d -fx 撤销本地修改

git 技巧

1
2
3
4
5
6
7

git checkout 9146467 -- yarn.lock #从某个commit中获取到yarn.lock文件
git log --oneline --no-merges #查看日志过滤掉merge commits信息
git commit -v --amend #重新提交最后一次commit描述信息
git log --pretty=oneline --graph --decorate --all #打印可视化log
git log --since='FEB 10 2016' --until='FEB 19 2016' #查询指定日志的log
git log -S"config.menu_items" #根据commit关键字查询log

merge 合并代码

1
2
3
4
5
场景:将1.6.0-release代码合并到master中
git checkout master
git merge 1.6.0-release
git status #检测冲突
git push origin master

thires ours 解决冲突

1
2
3
4
5
6
7
8
9
10
11
12
13
git checkout test 
git merge master

# 合并master 到test , 当出现冲突
git chekcout --theirs README.md #以master版本为准合并
git chekcout --ours README.md #以test版本为准合并

git commit -am "merge conflicts"
git push

# 解决合并到目标分支(dev)冲突

git rebase dev # 基于当前分支 rebase dev 然后解决冲突即可合并

合并commit

1
2
3
4
5
6
7
8
git rebase -i HEAD~3 
pick xxx
s yyy
s yyy

#如果合并有冲突,解决冲突
git add .
git rebase continue

打包

1
git archive --output xxx/yyy.tar.gz(输出的 目录) v1.4.9(版本)

远程操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
git remote add <remote> <url>
# 添加远程版本库
git remote -v
# 查看远程版本库信息
git remote show <remote>
# 查看指定远程版本库信息
git remote remove <remote>
# 删除远程remote链接
git remote rename <old> <new>
# 重命名远程链接名

git pull <remote> <branch>
# 下载代码及快速合并

git push <remote> <branch>
# 上传代码及快速合并

git merge origin master
# 将本地的远端库合并

git fetch origin
# 将远端库获取本地但不合并

git commit 信息建议

1
2
3
4
5
6
7
8
feat: 新功能
fix: 修复问题
docs: 修改文档
style: 修改代码格式, 不影响代码逻辑
refactor: 重构代码, 理论上不影响现有功能
perf: 提升性能
test: 增加修改测试用例
chore: 修改工具相关(包括但不限于文档, 代码生成等)