git
git是现在最流行的版本管理工具,应用范围非常广泛,工作中基本都会用到(除了一些互联网金融公司外)。使用git好处有很多,包括但不限于便于多分支开发,
历史管理跟回滚方便,发布等。配合webhook,可以在ci上集成自动发布等。是一件利器。熟练git的一些基本操作,會给开发带来很大好处。
命令行
个人并不是完全使用命令行来进行所有的git操作的,使用图形化工具真的會方便很多。然而有些情况下也会使用到命令行的方式来进行某些操作。了解一些命令行,會更好。
- 基本操作
git clone rep_address // 克隆一个远程库
git status //查看当前状态
git add file_name //将某个文件添加到git
git add . // 将所有新文件添加到git
git commit -am 'message' // 提交所有更改,带描述
git push //提交到远程库
git diff //查看diff
- 分支
git checkout branch_name //checkout到某个分支
git branch //查看分支
git branch some // 新建一个名为some的分支
git push [远程名] :[分支名] //删除某一远程分支
- 提交到远程仓库
//创建本地仓库,并push到远程仓库
git init //将本地目录添加到仓库
git remote add [shortname] [url]
git add .
git commit -am 'first commit'
git push --set-upstream [url]/[shortname] master
- 提交者
(PS: Md里'-'分点,下面的内容有断行就会分开,所以嵌入的代码块不能带空行,不然显示出错)
// 设置全局
git config --global user.name 'Author Name'
git config --global user.email 'Author Email'
// 或者设置本地项目库配置
git config user.name 'Author Name'
git config user.email 'Author Email'
- cherry pick
git cherry-pick [commit-id] //将某个commit,cherry pick到当前分支
- 合并
git merge xxx //将某个指定分支合并到当前分支
git merge [commit-id] //将另一个分支某个commit-id为止的代码merge到当前分支
- stash
git stash //保存当前的工作进度。会分别对暂存区和工作区的状态进行保存
git stash save "message..." //这条命令实际上是第一条 git stash 命令的完整版
git stash list //显示进度列表。此命令显然暗示了git stash 可以多次保存工作进度,并用在恢复时候进行选择
git stash pop [--index] [<stash>] //如果不使用任何参数,会恢复最新保存的工作进度,并将恢复的工作进度从存储的工作进度列表中清除。如果提供参数(来自 git stash list 显示的列表),则从该 <stash> 中恢复。恢复完毕也将从进度列表中删除 <stash>。选项--index 除了恢复工作区的文件外,还尝试恢复暂存区。
git stash apply [--index] [<stash>] //除了不删除恢复的进度之外,其余和 git stash pop 命令一样
git stash clear //删除所有存储的进度
git stash show -p //查看最近stash的diff
git stash show -p stash@{1} //查看某个stash的diff
- 回滚
git reset --hard [commit-id] //回滚到某个commit , 可选 --soft, --mixed
- 标记
git update-index --assume-unchanged [filename] //假定某个文件没有发生变化,但是切换分支,pull代码会更新index
git update-index --no-assume-unchange [filename] //取消
git update-index --skip-worktree [filename] //将某个文件从git检测中忽略
git update-index --no-skip-worktree [filename] //取消
- 统计
//统计仓库里每个人的提交行数
git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done
- ssh
见gitoschina的教程,讲得很详细。--> git ssh
gui工具
git的图像化管理工具有两个是比较推荐用的,sourceTree以及GitKraken。个人比较喜欢GitKraken,所以下面會以Gitkraken为例介绍。在sourceTree上操作也是差不多的。
简单操作
一些克隆仓库,pull代码,commit代码,push代码等操作相当简单,就不多做介绍了。
如下图
cherry pick
切换分支,然后在另一个分支上的某个commit上右击,选择cherry pick就可以把该commit,提交到当前分支。
stash
stash可以将所有的未提交更改暂存起来。本地代码做了更改,可以先stash起来,然后pull更新,再次pop,stash。
在GitKraken里,stash也非常简单,而且每次pull代码时,GitKraken会自动帮我们进行,以下操作
- stash 更改
- pull 更新
- pop stash
- 手动处理冲突(如果有)
非常方便/
merge
在GitKraken上,merge分支很方便,直接将另一分支拖动到当前分支,即可合并
合并多个commit
有时提交了很多commit,比如有1,2,3,共三个commit,这三个commit都是为了实现某个功能而做的更改。那么我们可以把这三个commit合并成一个再进行提交。
操作,右击第一个commit的前一个提交,选择reset to this commit -> soft, 这样就会把1,2,3,三个commit的更改合并在一起,然后再把这些更改重新提交一次即可。