git使用记录

一般流程

1
2
git clone git@github.com:michaelliao/learngit.git
git checkout -b dev origin/dev //git checkout -b <branch> --track <remote>/<branch>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
git clone git@github.com:michaelliao/learngit.git
git checkout -b feature //创建并切换到dev分支
//coding...
git diff //查看硬盘(working tree)和本地仓库的差异
git add . //注意:如果有不想提交的文件不要用`.`
git commit -m 'your descroption'
git push -u origin feature //将当前分支推送到远程并设置上游分支
//master分支有其它人的新的提交
git checkout master
git pull origin master
git checkout feature
git rebase master //以master分支的最新提交为基础,这样提交是一条直线
//maybe have to resovel conflict
git push -f origin feature
//create pull request(gitlab is merge request)
1
2
3
4
$ git pull origin next

$ git fetch origin
$ git merge origin/next

注意: git checkout <branch>没有加--no-guess选项时,会先在本地查找当前分支,未找到则会查找远程仓库

修改提交

1
2
3
git commit -m 'initial commit'
git add forgotten_file
git commit --amend

版本回退

1
2
3
git log --oneline
git reset --hard 1094a
git push -f

撤销回退

1
2
3
4
git reflog
git reset --hard 1094a
git reset --soft 1094a //保留更改
git reset --hard origin/<branch_name> //重置原始版本

删除中间某次提交

1
2
3
4
5
//删除某次提交并生成新的提交记录,注意:A分支已经revert某次提交1094a,B分支想重新merge1094a的提交需要删除revert的那次提交
//总之一句话,想要合并已经revert的分支,需要revert你的revert
git revert -n 1094a
git commit -m "revert 1094a"
git push

隐藏工作区

1
2
3
git stash
git stash list
git stash pop

rebase

Reapply commits on top of another base tip

1
2
3
4
5
# 将某次提交作为base,并修改之后的提交,可以删除中间的多次提交,压缩等等
# 使用rebase删除会修改rebase某次提交之后的所有提交,相当于是把之后的每次提交重新提交了一次
git rebase -i commit_hash
# 将当前dev代码rebase到当前分支,删除分支后将是一条直线
git rebase dev

添加远程仓库

1
2
3
4
git remote add origin git@github.com:michaelliao/learngit.git
//合并两个无关联的仓库
git pull origin master --allow-unrelated-histories
git push -u origin master

创建删除远程分支

1
2
git push origin serverfix:serverfix
git push origin --delete serverfix

配置别名

全局配置文件存放在~/.gitconfig
将日志打印的优雅:

1
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

git文档地址:https://www.git-scm.com/book/zh/v2