笔记参考自以下链接:
git官方网站 https://git-scm.com/
git小书 https://git-scm.com/book/zh/v2
阮一峰 git_cheat_sheet http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html
### 经常使用的git命令
git add ./xx文件 git status git diff xx文件 git commit -m '注解' git diff --staged/--cached git log -p git rebase xx分支 git merge xx分支 git pull origin xx远程分支 git push origin xx远程分支 git stash =>git stash pop 多次stash =>git stash apply(应用最近的一个stash) git stash list => git stash apply stash@{2}
(0)注意事项
( a ) 一定想着建分支(无论是改bug,还是新的feature) ( b ) 每次操作git要多用git status ( c ) git commit -m '注释' 注释一定要写的简洁明要
(1) git 简单流程
git add . git commit -m "代码描述" git push origin master //远程仓库的默认名称为origin
(2)将本地a分支上传到远程a分支上
git add . //在a分支上 git commit -m "代码描述" git checkout master git pull origin master //在master分支上,拉下远程master上最新代码,与本地代码合并。有冲突则解决,无冲突则继续 git checkout a git rebase master //在分支a上,将分支a和master上代码融合,有冲突则按照提示解决 git push origin a
(3)git基础知识
1,获取git仓库
git init //从现有的项目或目录导入所有文件到git中 或 git clone xx@github.com //从一个服务器克隆现有的git仓库
2,添加文件到git仓库
git add <file1> <file2> //或git add . 添加所有的文件到index/stage中 git status //一定要在git commit 之前查看是否还有未添加的文件 git commit -m '代码描述'
目前git本地仓库内仅有两个commit记录
文件的状态变化周期
(1)在当前分支下,创建一个新的文件
echo 'this is a test'>>'test.text' //新建一个有this is a test的内容的test.text文件 //echo 'add one line'>'test.text //使用>只会每次替换原来的内容;>>会新加一行内容 cat test.text //查看test.text的内容 vi test.text //打开test.text文件
//vim 同vi 一样,有两种工作模式:命令模式,编辑模式(对文件进行增删查改)
//(1)输入字母i或insert,进入编辑模式
//(2)保存文件:esc退出编辑模式,进入到命令模式
在命令模式下,ZZ或:wq为保存修改并退出vim
:w保存修改,仍在命令模式
//(3)放弃修改:esc退出编辑模式。进入到命令模式
在命令模式下,:q!放弃修改并退出vi
:e!放弃修改,仍在命令
(2)查看状态 git log / git status / git diff <file>
git status //查看工作区的状态,查看哪些文件被改动
说明工作区比较干净,所有的改动都已经添加到本地仓库内
git diff <file> //查看该文件具体有哪些改动
git log //查看从最近到最远的提交日志
git log --graph --pretty=oneline --abbrev-commit //以tree型展示提交记录
git log --pretty=oneline //查看提交日志的commit id号
3,在版本之间穿梭 git reset --hard commit_id
(1)版本回退:过去版本
git reset --hard HEAD^ //回退到过去:上一个版本(现在只剩一个commit日志了), HEAD^5回退到上5个版本
git reset --hard f7c7a //回退到commit id为f7c7a……的版本,不需要写全,git会自己去找
(2)版本找回:未来版本(回退后悔药)
git reflog //查看每一次的记录 git reset --hard f7c7aba //去到未来:版本f7c7aba……
4,撤销修改
(1)放弃在工作区的修改 git checkout -- test.text // git checkout -- <file>用本地仓库中的版本替换工作区的文件
(2)放弃在暂存区的修改 git reset HEAD test.text +(1)
(3)放弃在本地仓库的修改 git reset hard commit_id + (2) +(1)
5,删除文件
(1)工作区删除文件 rm test.text
(2)在git上也要删除文件记录 git rm test.text
万一在git上删除错误,想要撤销 git checkout -- test.text
6,分支管理
(1)新建分支/删除分支
git branch test //新建一个叫test的分支,并切换到test分支上
git checkout test
==
git checkout -b test
git branch -d test //删除一个叫test的分支
git branch -D test //强行删除一个从未合并过的分支test
(2)查看本地分支、远程分支
git branch //查看本地分支
git branch -a //查看远程分支
当前分支会有*,且为绿色
(3)合并某指定分支到当前分支
git merge <分支名>
(4)合并中出现冲突
Git用<<<<<<<
,=======
,>>>>>>>
标记出不同分支的内容,根据git提示,找到对应位置,然后解决冲突,然后再git add <刚刚修改的文件>; git commit -m '注释'
(5)bug分支 git stash / git stash pop
故事前提提要:你在test分支上开发,但是现在主分支上有bug需要修复,但是你在test分支上工作并没有完成,不想commit。
解决方法:
git add . git stash //在test分支上,将所有代码暂时先储藏起来 git checkout master //切换到有bug的分支上,然后在该分支上新建bug解决分支 git checkout -b issue-001 //然后在该issue--001分支上解决所有问题 git add . git commit -m 'issue-001' git checkout master git merge issue-001 //将master与issue-001分支上合并 git add. git commit -m 'fix issue-001' git checkout test //切到当初正在工作的分支test git stash pop //将原来的代码取出,并销毁stash记录 == git stash apply git stash drop
(6)多人协作
git remote //查看远程仓库信息 或 git remote -v git checkout -b branch-name origin/branch-name //本地创建与远程分支对应的分支branch-name git branch --set-upstream branch-name origin/branch-name //建立本地分支与远程分支的关联
7, 标签管理
git tag //查看所有标签,标签显示为字母顺序而不是时间顺序 git show v1.2 //显示标签v1.2的具体信息 git tag tag-name //在需要的分支上,默认最新的commit上,一般为类似v1.2 git tag -a v1.2 -m "version 1.2 released" //-a显示标签名,-m显示说明文字 git tag tag-name commit_id //给某一个commit_id添加一个标签 git tag -d v1.2 //删除标签v1.2,且标签只会存储在本地,不会自动上传到远程仓库 git push origin :refs/tags/v1.2 //在远程仓库删除远程标签 git push origin v1.2 //推送一个本地标签 git push origin --tags //推送全部未推送过的本地标签