Git复习之旅
偶然看到廖雪峰老师写的Git教程,被深深的吸引,可以说这是我目前看到的写的最好的Git教程(没有之一),于是就认真从头看完,收获颇丰,忍不住写下这篇复习之旅,以备后期拾遗,也是对自己学习旅程的一次记录。
好了,废话少说,上酸菜。。。
Git复习之旅
Git简介
Git是目前世界上最先进的分布式版本控制系统。1991年Linus创建了开源的Linux,从此Linux系统不断发展,到了2002年,代码库之大让Linus很难继续手工管理了,于是Linus选择了一个商业的版本控制系统BitKeeper,到2005年Linux社区牛人试图破解BitKeeper的协议,被BitMove公司发现,于是BitMove要求收回Linux社区的免费使用权。Linus花了两周时间自己写了一个分布式版本控制系统,这就是Git。一个月之内,Linux的源码由Git管理了。
集中式版本控制系统:版本库集中放在中央服务器上,工作的时间需要从中央服务器上获取最新代码,然后再开始工作,工作完再把修改后的代码推送回中央服务器。集中式版本控制系统最大的问题是必须联网才能工作,如果局域网还好,若在互联网上,遇到网络慢的话,会急死人。
分布式版本控制系统:没有“中央服务器”,每个人的电脑上都是一个完整的版本库,不必联网工作,而且互相之间不会有什么影响。安全性更高。
Git安装
现在Git可以在Linux、Unix、Mac、和Windows这几大平台上运行。
Linux上安装(Ubuntu Linux或Debian)
输入命令:$ sudo apt-get install git
在Mac OS X上安装Git
方法一:安装homebrew,然后通过homebrew安装Git
方法二:安装Xcode,Xcode集成了Git,不过默认没安装,运行Xcode,选择菜单“Xcode”->”Preferences”在弹出的窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。
在Windows上安装Git
- 下载msysgit,然后默认安装即可;
- 安装完成后,需要进行最后一步设置,在命令行中输入:
$ git config --global user.name "Your Name" $ git config --global user.email “email@example.com"
创建版本库
什么是版本库呢?版本库又名仓库,英文名repository,你可以见到理解为一个目录,这个目录里的所有文件都都可以被Git管理起来,每个文件的修改、删除Git都能跟着,以便任何时候都可以追踪历史,或者在将来的某个时刻可以“还原”。
- 选择一个合适的地方,创建一个空目录:$ mkdir learngit
注意:如果是Windows系统,为了避免莫名其妙的问题,请确保目录不包含中文
2. 初始化Git仓库:$ git init
3. 添加文件到Git仓库
$ git add readme.txt #把文件添加到暂存区 $ git commit -m "wrote a readme file” #暂存区添加到当前分支
时光穿梭机
查看状态:$ git status
查看修改:$ git diff readme.txt
查看历史:$ git log
查看历史:$ git log --pretty=oneline
版本回退:$ git reset --hard HEAD^
注意:上一个版本HEAD^,上上一个版本HEAD^^,上100个版本HEAD~100
版本回退:$ git reset --hard 362834 #362834为commit id,可不写全,Git可自己匹配
工作区、暂存区、版本库
工作区:Working Directory,就是在电脑上看到的目录,如我的learngit文件夹就是一个工作区。
版本库:Repository,工作区有一个隐藏的目录.git,这个不算工作区,而是Git的版本库。Git版本库中存了很多东西,其中最重要的就是stage(或者叫index)的暂存区,还有Git为我们创建的第一个分支master,以及指向master的一个指针叫HEAD。
管理修改
Git跟踪并管理的是修改,而非文件。实验:进行两次修改,第一次修改进行”git add”操作,第二次修改不进行,最后进行”git commit”操作,使用”git status”查看时,会发现第二次修改没有提交。
撤销修改
撤销工作区修改:$ git checkout -- readme.txt $ git checkout - dev 表示切换分支
撤销暂存区修改:$ git reset HEAD readme.txt
撤销版本库修改:$ git reset --hard HEAD^ $ git reset — hard 34323 撤销到指定的commit_id
删除文件
版本库中删除文件:$ git rm test.txt 然后 $ git commit -m ‘remove test.txt’
注意:"rm text.txt”和“git rm text.txt”的区别:前者仅删除本地文件,后者会同时删除本地文件和已经提交到暂存区的文件。前者恢复时,若被删除文件已经有过”git add”操作,则可以通过“git checkout -- text.txt”恢复;若被删除文件从未有过“git add”操作,那就只能到“回收站”去自己恢复了。后者恢复时,无论进行了”git commit -m ”操作,均可通过”git reset --hard commit_id”操作恢复删除的文件。
远程仓库
创建SSH Key:$ ssh-keygen -t rsa -C “your email@example.com”,创建成功后,用户会在主目录中找到id_rsa和id_rsa.pub两个密匙对,id_rsa是私钥,不能泄露,id_rsa.pub是公钥,可以告诉任何人。登录GitHub,打开“Account settings”>>“SSH Keys”页面,将id_rsa.pub添加进去。
关联远程仓库:$ git remote add origin git@github.com:wby/learngit.git
推送远程仓库:$ git push -u origin master
注意:加上-u参数,Git会推送内容,同时把本地master和远程的master分支关联起来
远程仓库克隆:$ git clone git@github.com:wby/gitskills.git
注意:Git支持多种协议,包括https,但是通过ssh支持的原生git协议速度最快
分支管理
创建分支:$ git branch dev
切换分支:$ git checkout dev
注意:$ git checkout -b dev等同于以上两条命令
查看分支:$ git branch
合并分支:$ git merge dev 合并dev分支到当前分支
合并分支:$ git merge —no-ff dev 禁用Fast forward模式,产生新的commit id
删除分支:$ git branch -d dev
强制删除:$ git branch -D dev
查看合并:$ git log --graph --pretty=oneline
储藏分支:$ git stash 储藏当前分支
查看储藏:$ git stash list
恢复储藏:$ git stash apply 恢复方法不会删除stash内容
删除储藏:$ git stash drop
恢复储藏:$ git stash pop 恢复的同事吧stash内容也删掉
查看远程:$ git remote
查看远程:$ git remote -v 加上-v可以查看详细的远程库信息
推送分支:$ git push origin master master也可以是dev分支
分支链接:$ git branch --set-upstream dev origin/dev 本地dev与远程origin/dev分支链接
抓取分支:$ git pull 抓取以上链接好的分支到本地
分支策略:master分支和dev分支,master分支必须是稳定的,如当dev分支到1.0版本时,再才能把dev分支合并到master上面。每个人的修改都是基于dev分支进行,从dev分支中产生新的分支进行开发,开发完成后再合并到dev分支上。遇到修改bug时,可以针对该bug创建分支,如分支”issue-101”。在开发新功能时,可以创建feature分支,如分支”feature-SignIn”
标签管理
发布一个版本时,我们通常需要在版本库中打一个标签,标签也是这个版本库的一个快照,便于能快速取出特定时刻的历史版本。标签其实就是指向某个commit的指针,所有创建和删除标签都很快。
创建标签:$ git tag v1.0 -m “publish version 1.0”
创建标签:$ git tag v1.0 322423423 指定的commit_id下打标签
创建标签:$ git tag -a v1.0 -m “version 1.0” 24382 -a指定标签名,-m指定说明文字
创建标签:$ git tag -s v1.0 -m”version 1.0” 342342 -s用私钥签名一个标签,必须安装gpg
查看标签:$ git tag
查看历史:$ git log --pretty=oneline —abbrev-commit
标签信息:$ git show v0.9 查看标签v0.9的详细信息
删除标签:$ git tag -d v1.0 这只是删除本地标签
删除标签:$ git push origin :refs/tags/v1.0 先进行本地删除,然后进行此操作删除远程
推送标签:$ git push origin v1.0 推送标签到远程
推送标签:$ git push origin —tags 全部推送
使用GitHub
如果想参与一个开源项目,比如bootstrap项目,可以访问https://github.com/twbs/bootstrap,点“Fork”就可以在自己的账号下克隆一个bootstrap仓库,然后在自己的账号下clone,克隆完后,在本地进行相关修改,往自己的仓库推送。如果你希望bootstrap的官方库能接受你的修改,你可以在GitHub上发起一个pull request。
自定义Git
文件忽略:在工作区创建.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
强制添加:$ git add -f App.class -f 强制添加到Git
命令检查:$ git check-ignore -v App.class 指定文件忽略检查,参考文件:https://github.com/github/gitignore
配置别名:$ git config --global alias.st status
注意:每个仓库的Git配置文件都放在.git/config文件里面,可以通过修改.git/config文件可以恢复以上别名修改。
搭建Git服务器
- $ sudo apt-get install git 安装git
- $ sudo adduser git 创建一个git用户
- 将所有id_rsa.pub文件导入到/home/git/.ssh/authorized_keys文件里
- $ sudo git init --base sample.git 假定/srv/sample.git为目标仓库,/srv目录下输入命令
- $ sudo chown -R git:git sample.git 把owner改为git
- 编辑/etc/passwd文件,“git:x:1001:1001:,,,:/home/git:/bin/bash”改为“git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell”,禁用shell登录,git用户可以通过ssh使用git;
- $ git clone git@server:/srv/sample.git 克隆远程仓库
(推荐使用Ubuntu或Debian作为服务器)
特别说明
以上所有内容参考自廖雪峰官方网站(http://www.liaoxuefeng.com)Git教程,预知详情请移步廖雪峰官网,此处为本人学习笔记,仅供参考,勿做它途!!!

浙公网安备 33010602011771号