最近在系统地学习使用Git,并了解Git进行版本控制的原理,以更好地学以至用。html
如下是学习过程当中整理的知识点总结。linux
1. 官网下载安装Gitgit
开始菜单找到git → git bash(或者在某个文件夹下面 右键 -> git bash here)github
配置/修改用户信息 $ git config --global user.name "Your Name" // --global参数表示全局配置,也能够针对不一样仓库配置不一样用户名和email $ git config --global user.email "email@example.com" 查看用户信息: $ git config --global user.name $ git config --global user.emailvim
$ mkdir learngit // 新建一个文件 $ cd learngit // 进入文件 $ git init // 把文件目录变成git仓库windows
在learngit下新建文件readme.txt $ git add readme.txt // 将文件添加到仓库 $ git commit -m "add readme file" // 提交文件bash
修改readme.txt文件 $ git status // 查看当前状态 $ git diff // 查看修改的内容 $ git add filename $ git commit -m "some describe for this commit"app
$ git log // 查看日志 $ git log --pretty=oneline // 一条记录显示在一行 $ git reset --hard HEAD^ // 回到上一个提交,HEAD^^回到上上个提交, $ git reset --hard HEAD^^ // 回到上上个提交 $ git reset --hard 8adc // 回到commit id开头为8adc的版本 $ git reflog // 查看操做记录ssh
一个git目录能够分为两个部分:编辑器
版本库包含暂存区stage、master分支(包含一个HEAD指针)。 提交文件必须先提交到stage再提交到分支上。 $ git add filename // 将工做区的文件提交到stage $ git commit -m "..." // 将stage区的文件提交到分支上 $ git diff HEAD -- filename // 查看工做区和分支上代码的区别
工做区:git checkout -- filename // 清理工做区(距离上次add或commit后所作的修改)
stage: 1. git reset HEAD filename // stage → 工做区(把上次add但未提交的stage中的内容打回工做区) 2. 清理工做区
分支: git reset --soft HEAD^ // HEAD^表示上一个版本,也能够写做HEAD~1;soft表示不删除工做区改动代码,撤销commit,不撤销git add .;harg表示删除工做区改动代码,撤销commit,撤销git add . git commit --amend // 只修改注释,进入vim编辑器,修改完注释后保存便可
新建一个文件test → add → commit 此时git分支保存了新文件test,删除文件的几种方式以下:
恢复文件的方法同【撤销修改】
添加远程仓库须要两步操做:本地生成SSH Key添加到远程仓库、本地仓库与远程仓库关联。
1.建立SSH Key $ ssh-keygen -t rsa -C "your@email.com" // 生成一个公钥id_rsa.pub和一个私钥id_rsa $ cd ~ // 进入用户主目录 $ cd .ssh $ ls // 列出全部文件 $ cat id_rsa.pub // 查看文件内容 复制内容到 git/github -> Account Setting -> SSH -> 粘贴
2.关联远程仓库 git/github建立仓库 $ git remote add origin github.com/example/lea… // 本地仓库关联远程仓库 $ git push -u origin master // 推送本地仓库到远程仓库master分支 -u表示第一次推送 $ git push origin master // 后续推送到远程分支
以上失败时: $ git remote rename oroigin old-origin $ git remote add origin git @.../project-name.git $ git push -u origin --all
git/github新建仓库 → Clone or download → 复制连接(HTTPS or SSH) $ git clone git@github.com:example/gitskills.git $ cd gitskills
克隆到本地后的仓库只有master分支,须要新建dev分支并和远程分支关联 $ git checkout -b dev origin/dev $ git branch --set-upstream-to=origin/dev dev
Git支持多种协议,默认的git://使用ssh,但也可使用https等其余协议 使用https速度慢,每次推送都必须输入口令,可是在某些只开放http端口的公司内部就没法使用ssh协议而只能用https
若是在git上新建了一个分支,只需在本地运行: $ git fetch $ git checkout branchName
查看分支:git branch 建立分支:git branch 切换分支:git checkout 建立+切换分支:git checkout -b 合并某分支到当前分支:git merge 删除分支:git branch -d 强行删除:git branch -D
分支开发策略:master用来发布新版本 dev用来开发 在dev上新建分支开发,完成后合并到dev分支,再新开分支
若是两个分支同时修改了一个文件,merge的时候会冲突 $ git merge feature1 在IDE里解决完冲突 → add → commit (此时master就是修改后的,feature1是修改前的) $ git checkout feature1 $ git merge master // feature1和master同步了,此时不会冲突
合并分支策略 $ git merge dev // Fast forward模式,将master指针指向dev的最新一次commit,此时master和dev的commit id相同 $ git merge --no--ff -m "提交信息" dev // 禁用Fast foward模式,merge时会生成一个新的commit
当同时修改了同一个文件时会致使git push失败,必须先git pull → 解决冲突 → git push git pull若是提示no tracking information说明没有建立本地分支与远程对应分支的连接关系,经过如下方式设置: $ git branch --set-upstream-to=origin/dev dev // 本地分支dev关联远程分支origin/dev 再git pull
git stash用于将“修改过的被追踪的文件和暂存的变动”及stage和工做区的修改暂存起来。
stash的范围: Changes to be committed(stage) Changes no staged for commit(工做区)
$ git stash // 存档当前的改动并清理工做区和stage $ git stash list // 罗列全部的存档 $ git stash apply // 读取最近的一次存档 $ git stash apply stash@{0} // 指定读取某次存档 $ git stash drop // 删除存档 $ git stash pop // 读取并删除最近一次存档
这部份内容的参考教程: gitbook.liuhui998.com/4_2.html git-scm.com/book/zh/v1/…
步骤 | 图示 |
---|---|
假设有两个分支:master、experiment |
![]() |
切换到experiment分支执行rebase $ git checkout experiment $ git rebase master 取出experiment分支上的提交C4接到master分支上的最新提交C3后面,将experiment指向C4'。此时experiment分支的进度是最新的,而master分支无变化。 rebase时若是出现了冲突: 打开IDE解决冲突 $ git add . $ git rebase --continue 若是要终止rebase: $ git rebase --abort |
![]() |
切换到master分支执行merge $ git checkout master $ git merge experiment 此时master将指向最新的commit |
![]() |
能够给每次commit打一个标签来增长辨识度。
$ git tag v1.0 // 给当前分支的最新提交打标签 $ git tag v0.9 commitid // 给某次commit打标签 $ git tag -a v0.1 -m "version 0.1 released" commitid // 给某次提交建立带有说明的标签 -a指定标签名 -m指定说明文字 $ git tag // 查看全部标签 $ git show v0.9 // 查看某个标签的详细信息 $ git push origin v1.0 // 将某个标签推送到远程 $ git push origin --tags // 将所有本地标签推送到远程 $ git pull origin --tags // 拉取远程标签 $ git tag -d v0.1 // 删除本地某个标签 删除远程标签: $ git tag -d v0.9 $ git push origin :refs/tags/v0.9
$ git log --graph --pretty=oneline --abbrev-commit // git log --graph查看分支合并图 $ git remote // 查看远程命名 $ git remote -v // 查看远程库信息 $ pwd // 显示当前文件路径 $ ls // 查看该目录下的全部文件 $ cat filename // 查看文件内容 $ vi filename // 进入文件编辑模式
学习参考教程:www.liaoxuefeng.com/wiki/001373…
Linux命令大全:www.runoob.com/linux/linux…