Git是目前世界上最早进的分布式版本控制系统。html
Git同时也是Linus
改变世界的第二大创举。
关于分布式和集中式的区别,能够看一下这篇文章集中式vs分布式git
文件所在的文件夹github
文件夹中含有.git的隐藏文件夹。app
经过add添加的文件被添加到暂存区,commit提交后,把暂存区的全部内容提交到分支上。ssh
git config --global user.name "hope" git config --global user.email "12332@qq.com"
配置级别
--local 默认,高优先级 只影响本仓库 .git/config
--global 中优先级,影响到全部当前用户的git仓库 ~/.gitconfig
--system 低优先级 影响到全系统的git仓库 /etc/gitconfig分布式
git init git status //查看仓库情况
git status
对状态的跟踪,包括内容状态:工做目录、暂存区、提交区
文件状态:未跟踪和已跟踪网站
分两步spa
第一步,使用命令git add<file>或者git add --all,注意,可反复屡次使用,添加多个文件;
第二步,使用命令git commit,完成。-m后面输入的是本次提交的说明.net
每次commit做为一次快照版本控制
git log //能够查看历史记录 git log --pretty=oneline //版本ID一行显示 git reset --hard HEAD^ //会退到上一个版本 git reset --hard commit_id //退到指定ID版本
上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,往上100能够写成HEAD~100
。
有时因为回退到以前的版本,原来的新版本就没有显示了,此时可使用
git reflog
进行查看ID,而后进行回退。
若是想要修改的文件被记录在版本库里,add以后须要commit,否则不会记录以前完成的修改过程。
若是想撤销修改的话,
git checkout -- file
若是文件尚未add到暂存区的话,就会与版本库里的相同。若是文件在暂存区的话,撤销修改就回到添加到暂存区后的状态。让这个文件回到最近一次git commit或git add时的状态。
git reset HEAD <file>
将文件内容从上次提交复制到暂存区
git checkout HEAD --<file> //将内容从上次提交复制到工做目录
直接在文件里面删除文件或者使用rm file
进行删除
a.若是须要从版本库中删除该文件
git rm file //从暂存区与工做目录删除 git commit -m "remove file"
git rm --cached //仅从暂存区删除 git rm $(git ls-files --deleted) //删除全部被跟踪可是在工做目录被删除的文件
b.删除错了,恢复
git checkout -- file
这样作能够恢复文件到最新版本,可是最近一次提交后的修改将会丢失。
为使本地的Git仓库与GitHub仓库之间关联,须要作一些前期工做。
ssh-keygen -t rsa -C "youremail@example.com"
登录GitHub,打开“Account settings”,“SSH Keys”,“Add SSH Key”,粘贴id_rsa.pub
里面的内容
这样你在电脑就能够推送到github上的仓库了。
git remote add origin git@github.com:github帐户名/仓库名称.git
下一步,把本地库的全部内容推送到远程库上:
git push -u origin master
以后进行推送的时候就能够不用加上-u,直接使用
git push origin master
从一个远程库进行clone
git clone git@github.com:GitHub帐户名/项目名.git
git checkout -b dev
等价于
git branch dev git checkout dev
查看分支
git branch
切换分支
git checkout master
合并分支
git merge dev
删除分支
git branch -d dev
Git没法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
用git log --graph
命令能够看到分支合并图。
用Fast forward模式,删除分支后,会丢掉分支信息。若是要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,能够从分支历史上就能够看出分支信息。
git merge --no-ff -m "merge with no-ff" dev
须要尽早完成bug的修理,可是分支上的工做只是工做到一半,这是咱们可使用
$ git stash
保存工做,而后在master分支上建立分支修复。
修完bug后有两种方法进行修复
git stash apply //stash内容不删除 git stash pop //恢复的同时也把stash的内容给删除了
因为dev分支上没有bug修复的代码,因此能够切换到dev分支上,而后
git merge master
有时须要丢弃新的feature,因此使用强行删除
git branch -D feature-vulcan
可使用git remote
参看远程库的信息
git push origin dev
约定在dev分支上开发,就必须建立远程origin的dev分支到本地,建立本地dev分支:
$ git checkout -b dev origin/dev
git pull
若是推送失败的话,可能缘由是没有指定本地dev分支与远程origin/dev分支的连接
git branch --set-upstream branch-name origin/branch-name