看了廖雪峰大大的博客,学习了git的使用,收益很多。
由于公司不能连外网,因此后面跟远程仓库的交互不能实践。
本文主要是把一些命令给总结整理了下:
初始化一个Git仓库
git init
添加文件到Git仓库
分两步:
git add “filename” //添加文件,可反复多次使用,添加多个文件
git commit -m “description” //提交
查看仓库状态
git status
查看文件修改内容
git diff “filename”
查看提交日志
git log --pretty=oneline
查看历史日志
git reflog
回退
git reset --hard HEAD^
//回退到上一个版本
//在Git中,用HEAD表示当前版本,上一个版本就是HEAD,上上一个版本就是HEAD^,当然往上100个版本是HEAD~100
git reset --hard commitid
// commitid可以通过提交日志查看,一般只需要前6位即可
撤销暂存区中的文件(已经add 但是没有commit的文件)
git reset HEAD “filename”
撤销工作区中的文件(修改但是没有add的文件)
git checkout – “filename”
//git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
删除文件
git rm “filename”
远程仓库
添加SSHKey:
ssh-keygen -t rsa -C "youremail@example.com"
将$HOME/.ssh/id_rsa.pub中的内容设置到git账号中
关联远程仓库
git remote add origin git@github.com:Aaron.DH/repo.git
推送内容
git push -u origin master
克隆远程仓库
git clone git@github.com:Aaron.DH/repo.git
分支管理
创建分支
git branch dev
切换分支
git checkout dev
(git checkout -b dev 创建并切换分支)
查看分支
git branch
合并分支
git merge dev (将dev分支内容合并到当前分支)
git merge --no-ff -m “merge with no-ff” dev
删除分支
git branch -d dev
储存工作区的修改
git stage
查看储存情况
git stage list
恢复储存的工作区
git stash pop
如果有多次stage,可以恢复到指定的stage
git stash apply stash@{0}
git stash drop stash@{0}
查看远程库信息
git remote -v
从本地推送分支
git push origin branch-name
(如果推送失败,先用git pull抓取远程的新提交)
在本地创建和远程分支对应的分支
git checkout -b branch-name origin/branch-name
建立本地分支和远程分支的关联
查看标签
git tag
创建标签
git tag v1.0
git tag v0.9 commitid
基于Gerrit的代码提交流程
初次提交代码
-
切换分支(直接基于origin/master切换, 这样切换的分支的代码一定是最新的)
git checkout -b branchX origin/master -
修改代码后提交
git add XXX(如果是所有文件都需要添加可以直接git add .或者git add --all)
git commit -
更新一次代码(这个操作主要是由于在切换分支到代码commit过程中其他人也有提交合并代码,所以需要更新一次保证代码是最新的)
git fetch --all
git rebase origin/master
(如果本地还有未提交的代码但是又不想提交的, rebase会报错, 可以执行git stash) -
如果有冲突则解决冲突(只能手动解决)
冲突解决完之后
git add XXX
git rebase --continue -
git review
-
如果之前有git stash的, 可以执行git stash pop
修改代码(代码提交后发现有问题需要重新修改)
-
切换到commit所在的分支
-
修改代码后提交
git add XXX
git commit --amend(重点:–amend会直接在之前的commit基础上提交, 而不会生成一个新的commit, 需要注意一个情况, 就是如果你的commit已经被merge, 则不能在此commit基础上继续提交) -
后续的步骤是一样的