参与组内的自动化平台编码时,开始接触到git的使用(以前自己也把代码提交到github,但都是用gui)。
总结了一些平时会用到的命令,随时补充。
概念
当前版本叫HEAD。当前分支的上一个版本叫HEAD^, 上上个版本叫HEAD^^,上一百个版本叫HEAD~100
本地代码管理
版本回退
git reset --hard HEAD^
版本前进到某个回退前,在当前版本之后的版本
git reset --hard commitId
查看版本记录
git reflog
把文件在工作区的修改撤销。回到最近一次commit或add时的状态
git checkout -- fileName
add之后撤销暂存区的修改(unstage)
git reset HEAD fileName
创建本地分支并打开 git checkout -b 分支名
强制删除本地分支(使用此命令时,必须没有在checkout这个分支) git branch -D 分支名
查看commit历史 git log
取消代码修改,抹掉所有修改记录 git reset --hard HEAD
查看具体变更内容 git diff 文件名
远程仓库
存在本地库,关联远程仓库
git remote add origin xxx.git
远程库为空时,第一次push。以后push都可以去掉-u的参数。
git push -u origin master
本地库不存在,可以从远程仓库clone
git clone xxx.git
分支管理
切分支后合并分支
checkout了哪个分支,执行merge命令时就以谁为主。
假设dev的版本是比master新的版本,以下命令,如果当前checkout的是master,那就是把dev的内容合并到master上
实质上只是把指在master上的head指针指向了dev。这种属于fast-forward合并
git merge dev
可以通过加--no-ff参数的方式禁用fast-forward模式,这样每一次merge都会创建一个新的commit
git merge --no-ff -m "xxxx"
解决冲突
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
Bug分支
当前有一些暂时无法完成的任务,但需要紧急先切一个分支解决问题再继续的时候
可以储存现场,留作以后使用
git stash
储存后,git status可以看到工作区没有任何文件。
然后正常在master切新的分支,完成bug修复工作后commit,然后切换到master再把这个临时分支合并进来
用git stash list查看存起来的工作现场。
要恢复有两种方法:
git stash apply(这种方法stash起来的内容不会删除,如果需要删除需要用命令git stash drop)
git stash pop(这种方法不保留stash的内容,取出来stash的东西就没了)
多人协作
本地仓库默认叫master
远程仓库默认叫origin
查看远程库的命令。带上-v这个参数可以查看更详细的信息
git remote
git remote -v
推送xxxx
git push origin xxxx
开始一个项目的例子
# 先拷贝项目到本地。此时本地只有一个master分支
git clone xxx.git
# 查看分支
git branch
# 创建远程的origin的dev分支到本地
git checkout -b dev origin/dev
# 开始在dev上工作,需要时推送到远端
git add .
git commit -m "xxx"
git push origin dev
解决冲突
# 先把最新提交从origin/dev抓下来
git pull
# 如果是因为没有指定本地dev和origin/dev分支的链接而失败,就先设置链接
git branch --set-upstream-to=origin/dev dev
# 然后重新pull
git pull
# 代码冲突解决之后,重新commit即可。
rebase
待续