上一篇介绍了git的环境安装配置,本篇对git在工做中经常使用的用法进行总结,已知足大部分的平常工做需求,对于其余的一些git命令用法在从此使用到时我也会更新上来,文中若有错误,欢迎你们指出来,谢谢~php
1、git本地基础用法
一、建立代码仓库 git inithtml
二、加入全部目录到仓库 git add .vue
三、提交 git commit -m "first commit" 简写 git cinode
四、查看git提交状态 git status 简写 git stgit
五、借助diff查看具体修改的地方 git diff 修改的文件路径 -号表示删除的部分 +表示添加的部分github
六、撤销未提交的文件 git checkout 文件路径 简写 git co 若是文件已经add,checkout没法撤销,先取消添加 git reset HEAD 文件路径,而后再checkout就okapi
七、查看记录 git log 记录太多,若是想只查看一条,经过id来查看 git log 记录id -1 -p (-1表示只查看一条,-p表示查看具体修改了什么内容)缓存
八、分支操做app
更新分支fetch
git fetch -p
查看分支
git branch -a 查看所有分支 git branch 查看本地分支
新建分支
git branch new_branch。新建本地分支 git checkout new_branch. 切换分支 git push origin new_branch。推送到远程仓库
删除分支
git push origin --delete branch。 删除远程分支 git branch -d branch。 删除本地分支 git branch -D branch。 强行删除本地分支(若是分支代码有修改,会提示须要合并分支)
合并分支 例如将远程master分支合并到当前mis_pro_content分支
git fetch --all git merge origin/master git push origin mis_pro_content
九、添加忽略文件 有些文件或目录是不须要提交到git中咱们能够将其添加到.gitgnore文件中,这样在提交的时候不会提交,好比node_modules依赖文件
根目录下新建.gitgnore文件,将node_modules/添加到文件中
2、远程git用法(团队合做)
一、远程下载代码到本地 git clone https://github.com/example/test.git
二、修改提交代码后需同步到远程版本库上 git push origin master (origin指定远程git版本库的地址)
master部分指定的是同步到哪一个分支上
三、同步远程修改的内容到本地 ,2种方式能够操做(fetch和pull)
--fetch方式同步
将远程的同步到本地 git fetch origin/master(同步下来的内容会放在分分支origin/master上) 查看远程版本库修改哪些了内容 git diff origin/master 合并分分支origin/master到主分支上 git merge origin/master
--pull方式(将远程代码同步而且合并到本地,至关于将fetch和merge一块儿执行)
git pull origin master
3、git版本撤销回滚
使用场景
- 糟了,我刚把不想要的代码,commit到本地仓库中了,可是尚未作push操做!
- 完全完了,刚线上更新的代码出现问题了,须要还原此次提交的代码!
- 刚才我发现以前的某次提交太愚蠢了,如今想要干掉它!
撤销
针对场景1,在未进行git push前的全部操做,都是在“本地仓库”中执行的。咱们暂且将“本地仓库”的代码还原操做叫作“撤销”!
- 状况一,文件被修改了,但未执行git add操做
git checkout fileName git checkout .
- 状况二,文件执行了git add操做,但想撤销对其的修改
git reset HEAD fileName 取消暂存 git checkout fileName 撤销修改
- 状况三 ,已在本地进行了屡次git commit操做,如今想撤销到其中某次Commit
git reset [--hard|soft|mixed|merge|keep] [commit|HEAD]
例如:
git reset --hard HEAD^。 回退到上一次版本 git reset --hard 3628164。 回退到指定的某个版本
状况四,将test分支合并到了当前分支,可是想撤销上一次的合并
git merge --abort
回滚
针对场景2,已进行git push,即已推送到“远程仓库”中。咱们将已被提交到“远程仓库”的代码还原操做叫作“回滚”
- 状况一,删除最后一次远程提交
方式1:使用revert
git revert HEAD git push origin master
方式2:使用reset
git reset --hard HEAD^ git push origin master -f
两者区别: revert是放弃指定提交的修改,可是会生成一次新的提交,须要填写提交注释,之前的历史记录都在; reset是指将HEAD指针指到指定提交,历史记录中不会出现放弃的提交记录。
- 状况二,回滚某次提交
# 找到要回滚的commitID git log git revert commitID
4、 本地修改暂存
git stash 本地修改暂存 git stash pop 还本来地修改 git stash list 查看暂存信息
git stash 可用来暂存当前正在进行的工做, 好比想pull 最新代码, 又不想加新commit, 或者另一种状况,为了fix 一个紧急的bug, 先stash, 使返回到本身上一个commit, 改完bug以后再stash pop, 继续原来的工做
git stash pop 从新应用缓存的stash
当你屡次使用’git stash’命令后,你的栈里将充满了未提交的代码,这时候你会对将哪一个版本应用回来有些困惑,
’git stash list’ 命令能够将当前的Git栈信息打印出来,你只须要将找到对应的版本号,例如使用’git stash apply stash@{1}’就能够将你指定版本号为stash@{1}的工做取出来,当你将全部的栈都应用回来的时候,可使用’git stash clear’来将栈清空。
5、上传本地项目到远程仓库
- 状况一,不是一个git仓库
git init git add README.md git commit -m "first commit" git remote add origin git@github.com:fozero/vue-nuxt-ssr.git 关联远程仓库,需先在远程仓库建立一个同名仓库 git push -u origin master
- 状况二,已是一个本地git仓库
git remote add origin git@github.com:fozero/vue-nuxt-ssr.git 关联远程仓库 git push -u origin master
注: 若新建远程仓库的时候自动建立了README文件,则在此以前先pull下来,git pull --rebase origin master,避免在push时报错
6、问题解决
一、分支合并时报错
https://stackoverflow.com/questions/2314437/resolve-conflict-delete-modify-in-git git merge origin/feature-wuj-uinfo CONFLICT (modify/delete): application/views/preorderg3/newshare.html deleted in HEAD and modified in origin/feature-wuj-uinfo. Version origin/feature-wuj-uinfo of application/views/preorderg3/newshare.html left in tree. CONFLICT (modify/delete): application/views/preorderg3/newpic.html deleted in HEAD and modified in origin/feature-wuj-uinfo. Version origin/feature-wuj-uinfo of application/views/preorderg3/newpic.html left in tree. Auto-merging application/controllers/api/Reserve.php Automatic merge failed; fix conflicts and then commit the result.
以上错误大体是说那个文件已经被删除了,我这边还存在,经过rm将冲突文件删除解决该问题
git rm application/views/preorderg3/newshare.html git rm application/views/preorderg3/newpic.html
7、最后
有时候能够看到别人提交的时候会显示emoj表情 ,其实咱们在提交的时候也可使用,对于不一样的提交类型 ,使用不一样的emoj表情,这样看起来更加的一目了然
在commit时,经过在emoj前面加‘:’,如:
git ci -m ':bug: fix click of get with no feedback'
更多的emoj表情能够查看
- https://github.com/carloscuesta/gitmoji/
- https://gitmoji.carloscuesta.me/
- https://zhuanlan.zhihu.com/p/29764863
更多的git命令用法能够查看