一、Git仓库简单操作
1.创建版本库
mkdir learngit
cd learngit
git init
2.将文件放入Git仓库
cd learngit
touch readme.txt /* 创建文件并进行一些修改 */
git add readme.txt /* 将文件添加到暂存区 */
git commit -m "wrote a readme file" /* 将暂存取文件提交到当前分支
在创建仓库时自动产生master分支*/
二、Git仓库进阶操作
1.版本回退
git log /* 查看提交历史 */
git log --pretty=oneline /* 省略作者和提交时间 */
/* log的组成:commit id + HEAD指针 + 提交注释 */
git reset --hard HEAD^ /* 回退到上个版本 */
git reset --hard HEAD^^ /* 回退到上上个版本 */
git reset --hard HEAD~100 /* 往前100个版本 */
git reflog /* 每一次命令的日志,可找commit id */
git reset --hard 1095a /* 可以根据commit id回退到任何的版本 */
2.暂存区与工作区
git status /* 此命令可以看到文件的修改、暂存情况 */
git diff HEAD -- readme.txt /* 此命令可以查看工作区和上交最新版本的区别 */
git checkout -- readme.txt /* 此命令可以将工作区的修改全部撤销 */ git reset HEAD <file> /* 把暂存区的修改撤销掉,重新放回工作区 */
3.git的删除操作
git rm test.txt
git commit -m "remove test.txt" /* 将文件从版本库删除 */
/* 若误删工作区的文件 */
git checkout -- test.txt /* 将删错的文件从版本库恢复 */
三、远程仓库
1.github远程仓库的初始化
/* 在github上点击Create repository创建一个新的仓库 */
git remote add origin git@github.com:yourname/learngit.git /* 将本地仓库与远程仓库进行关联,添加后远程仓库名字就是origin */
ssh-keygen -t rsa -C "youremail@example.com" /* 创建密钥 */
/* 密钥创建成功则在.ssh文件中存在公钥id_rsa.pub和私钥id_rsa */
/* 登陆github->setting-SSH and GPGkeys->将公钥添加入SSH Keys */
2.上传文件到仓库
git push -u origin master /* 第一次使用要加-u */
3.从远程仓库克隆
git clone git@github.com:yourname/gitskills.git
四、分支管理
1.创建与合并分支
git checkout -b dev /* 创建并切换到dev分支 */
git branch dev /* 创建dev分支 */
git checkout dev /* 切换到dev分支 */
git brach /* 查询所有分支 */
git merge dev /* 将dev分支的工作成果合并到master分支 */
git brach -d dev /* 删除dev分支 */
2.解决冲突
/* 前提master分支和其他分支都修改了文件并上交,此时可能会出现合并冲突 */
git merge <brach2> /* 产生冲突,有下列解决方案 */
/* 1.打开冲突文件对标注有<<<HEAD和分支冲突出进行修改 */
git add <文件> /* 标记解决方案 */
git commit -m "" /* 执行 */
/* 2.取消合并 */
git merge --abort /* 放弃合并*/
git log --graph --pretty=oneline --abbrev-commit /* 图形化、单行、简略id查看合并历史 */
3.分支管理策略
git merge --no-ff -m "" /* 表示禁用Fast forward */
/* --no-ff会让git生成一个新的提交对象。通常我们把master作为主分支,
上面存放的都是比较稳定的代码,提交频率也很低,而新分支是用来开发
特性的,上面存在许多零碎的提交,快进式合并会把feature的提交历史混
如master中,搅乱master的提交历史 */
4.bug分支
/* 突然程序出现BUG需要修复,而当前任务又未完成 */
git stash /* 如:当前在dev分支,存储工作现场 */
git checkout <debug brach> /* 切换到需要debug的分支上 */
git checkout -b issue -101 /* 建立debug分支 */
git checkout master /* bug修复完成切换回master分支 */
git merge --no-ff -m "fix" /* 合并分支 */
git checkout dev /* 回到dev分支 */
git stash pop /* 恢复并删除stash内容 */
git stash apply /* 恢复不删除stash内容 */
git stash drop /* 删除stash内容 */
git cherry-pick <commit id> /* 将该id commit时所作的修改复制带当前分支 */
5.feature分支
/* 添加一个新功能时,最好建立一个feature分支,完成后再合并删除 */
git branch -D <name> /* 强行删除一个没有合并的分支 */
6.多人协作
git remote /* 查看远程仓库的信息 */
git remote -v /* 详细信息 */
git push origin <branch> /* 推送分支 */
/* 另外一位同志 */
git branch dev /* 创建dev分支 */
git branch --set-upstream-to dev origin/<dev> /* 与远程分支建立链接 */
git pull /* 拉取仓库文件进行合并 */
五、标签管理
git tag <tag-name> /* 默认将标签打在最新提交的commit上 */
git tag <tag-name> <commit-id> /* 打在某次commit上 */
git tag /* 查看标签 */
git show <tag-name> /* 查看标签信息 */
git tag -d <tag-name> /* 删除标签 */
git push origin <tag-name> /* 推送标签到远程 */
git push origin --tags /* 一次性推送全部尚未推送到远程的本地标签 */
/* 对于已经推送到远程的标签 */
git tag -d <tag-name>
git push origin :refs/tags/v0.9 /* 删除标签 */
六、提高github搜索效率
in:name xxx /* 按项目名搜索 */
in:readme xxx /* 按README搜索 */
in:description xxx /* 安装description搜索 */
stars:>xxx /* stars数大于xxx */
forks:>xxx /* forks数大于xxx */
language:xxx /* 编程语言是xxx */
pushed:>YYYY-MM-DD /* 最后更新时间大于YYYY-MM-DD */