git的使用
获取项目仓库
- git init 初始化新仓库
- git clone 克隆现有仓库
记录更新到仓库
- git add 添加到暂存区
- git status 查看工作去和暂存区的状态
- git diff --cached 同 git diff --staged
查看暂存区内容
- git rm 删除原文件并暂存
- git rm --cached 移除跟踪但不删除原文件
- git rm log/\*.log ‘\’表示递归
- git mv file_from file_to 改名并暂存
查看提交历史
- git log -p -2 显示最近2次提交的内容,和git show -2等效
- git log --pretty=oneline 单行展示
- git log --pretty=format:"%h - %an, %ar : %s" 定制显示的格式
- git log --author=xcq 只看该作者的提交
- git log --name-only 显示提交修改的文件
- git log --stat 显示提交的文件和增减的行数
撤销操作
- git reset [--soft | --mixed | --hard] [<commit>]
- git reset --hard <commit> 工作区的内容变得和暂存区一致,也和HEAD所指向的提交内容相同
- git reset --soft <commit> 只撤销提交信息,不改变暂存区和工作区
- git reset --mixed <commit> 回退提交和暂存区,保留工作区
- git reset HEAD 取消暂存,还原工作区的修改
- git checkout 撤销工作区的修改,危险操作
远程仓库使用
- git remote -v 查看所有远程仓库
- 本地添加远程仓库git remote add [short_name] url
- kernel 通过这种方式可以添加多个远程仓库
- git remote show remote_name 显示远程仓库信息
- git remote rename old new 更改本地的远程仓库名
- git remote rm 移除本地的远程仓库
远程分支
- git checkout -b serverfix origin/serverfix 基于远程分支创建本地分支
- git fetch 只更新远程仓库,不更新本地文件
- git pull --rebase 避免pull代码时出现merge的情况
提交
- git commit -s 会加上signed-off-by字段
- gerrit 提交代码格式
- git push master HEAD:refs/for/remote_branch
其中的HEAD代表本地分支,也可以用本地分支名替代,refs/for/是用gerrit管理需要加的前缀。
- 追加提交
- git add
- git commit --amend
- Ctrl+O->Enter->Ctrl+x
- 没用gerrit管理的代码提交格式
- git push remote HEAD:remote_branch xxx表示远程分支
- git push <远程主机名> <本地分支名>:<远程分支名>
- git commit后没有Change-Id生成,一般是因为不在源工程目录下同步的仓库,丢失了hook导致的,或者从gerrit上同步代码时没有同步hook
- 到gerrit上搜索对应的Projects
- 点击Clone with commit-msg hook,复制克隆命令
- 到所在目录粘贴,去掉前面的git clone和后面的目录前缀,确保scp新的hooks到.git中
- 在其他目录克隆某个仓库,一定要记得带上hooks,后面就不会出现提交没有Change-Id的问题
生成补丁
- git format-patch
- git format-patch -M master 当前分支所有超前master的提交
- git format-patch -s 4e16 某次提交以后的所有提交
- git format-patch -3 最近的3个提交
- git format-patch –n 07fe4 某次提交(含)之前的n次提交
- git am *.patch 打补丁
- git am --abort 清除
- git diff
- git diff branch_a branch_b dir/ 对比2个分支指定目录的差异
- git diff branch1 branch2 --stat 显示所有差异文件列表
- git diff/show --patch-with-stat 显示列表
合并分支
当前在dev分支,还有一个master住分支,dev是从master某个分支切分出来的,dev和master分支各自向前推进
- git merge master 将master后面的更新合并到当前dev分支
- git rebase master,这个命令会把你的dev分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到”.git/rebase“目录中),然后把dev分支更新 到最新的master分支,最后把保存的这些补丁应用到dev分支上
- git revert commit_ID 回退某一个特定的提交
- git cherry-pick <commit id>
- git clean -d -fx 删除当前添加的文件
网友评论