基本概念:
(1)工作区:电脑可以看到的目录。
(2)暂存区:stage(index),一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
(3)版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Index:暂存区(.git/index) HEAD:指向master分支的一个”游标”
Objects: git的对象库(.git/object 含创建的各种对象及内容)
Master:master分支所代表的目录树。
Git:保存不同时刻的文件快照。
Git分支:本质仅仅是指向提交对象的可变指针。
(1)git add命令:暂存区的目录树被更新,工作区修改(增加)的文件内容被写入到对象库中新对象中,对象ID被记录在暂存区文件索引中。
(2)git commit 命令:暂存区目录树写到对象库,master分支更新。(指向的目录书就是提交时暂存区的目录树)。
(3)git reset HEAD命令:暂存区目录树被master分支指向的目录树所替换。
(4)git rm --cached <file>命令:直接从暂存区删除指定文件,工作区不改变。
(5)git checkout . 或git checkout -- <file>命令:用暂存区全部或指定文件替换工作区文件。(危险:清除工作区未添加到暂存区的改动)
git checkout 也可切换工作空间。
(6)git checkout HEAD . 或 git check out HEAD <file> 命令:会用HEAD指向的master分支中全部或部分文件替换暂存区和工作区中的文件。(危险:会清除工作区及暂存区未提交的改动)。
(7) git init 初始化版本库,当前文件夹下初始化一个仓库,此时文件里会到一个.git的隐藏文件夹(将当前目录变为仓库)
(8)git pull :将远程库数据更新至本地
(9)git push origin master:将本地库提交至远程库。
基本命令
(1)配置:
配置用户名:git config --global user.name "你的名字"
配置e-mail:git config --global user.email "你的邮箱@xx.com"
(2)与添加有关的:
将当前目录变为仓库:git init
将文件添加到暂存区:git add 文件名 [可选:另一个文件名]
将暂存区提交到仓库:git commit –m "描述"
(3)与查询有关的:
查询仓库状态:git status
比较文件差异(请在git add之前使用):git diff 文件名
查看仓库历史记录(详细):git log
查看仓库历史记录(单行):git log --pretty=online 或 git log --online
查看所有版本的commit ID:git reflog
(4)与撤销有关的:
撤销工作区的修改:git checkout -- 文件名
撤销暂存区的修改:git reset HEAD 文件名
回退到历史版本:git reset --hard 该版本ID
回退到上个版本:git reset --hard HEAD^
(5)与标签有关的:
为当前版本打标签:git tag 标签名
为历史版本打标签:git tag 标签名 该版本ID
指定标签说明:git tag –a 标签名 –m "标签说明" [可选:版本ID]
查看所有标签:git tag
查看某一标签:git show 标签名
删除某一标签:git tag –d 标签名
(6)与GitHub有关的:
先有本地库,后有远程库,将本地库push到远程库
关联本地仓库和GitHub库:git remote add origin 网站上的仓库地址
第一次将本地仓库推送到GitHub上:git push –u origin master
先有远程库,后有本地库,从远程库clone到本地库
从远程库克隆到本地:git clone 网站上的仓库地址
网站地址可以选择HTTPS协议(https://github.com...)、SSH协议(git@github.com...)。
如果选择SSH协议,必须将Ubuntu的公钥添加到GitHub上。见下一步
SSH Key
生成SSH Key:ssh-keygen –t rsa –C "你的邮箱@xx.com"
生成Key时弹出选项,回车选择默认即可。
Key保存位置:/root/.ssh
登陆GitHub,创建new SSH key,其内容为/root/.ssh/id_rsa.pub中文本
已经有了本地库和远程库,二者实现同步
Git与Svn区别?
(1)Git为分布式,且内容按元数据方式存储,且没有全局版本号,且内容完整性优.(使用哈希算法磁盘故障时,可降低对版本库破坏)。
(2)Svn为非分布式,内容按文件存储,有明确的版本号。
参考网站:
(1)http://blog.youkuaiyun.com/tomatozaitian/article/details/73515849
(2)http://www.runoob.com/git/git-workspace-index-repo.html
基础命令:
git --version 查看git的版本信息
git config --global user.name 获取当前用户的登录名。
git config --global user.email //获取当前登录用户的邮箱
登录git (设置git用户信息)
git config --global user.name ‘设置英文用户名’
git config --global user.email ‘设置的Email’
初始化git仓库
git init 当前文件夹下初始化一个仓库,此时文件里会到一个.git的隐藏文件夹(将当前目录变为仓库)
git commit -m ‘备注信息’ 增加到版本库
git log 查看仓库历史记录(详细 )
git status 查看仓库状态
git rm in.txt --cached 删除暂存区指定文件
git reflog 查看版本的提交ID
git reset 取消暂存
git pull 从远程库获取,并合并到本地分支
与GitHub有关的:
关联本地仓库和GitHub库:git remote add origin 网站上的仓库地址。
第一次将本地仓库推送到GitHub上:git push –u origin master。
从远程库克隆到本地:git clone 网站上的仓库地址。
比较差异
比较的是暂存区和工作区的差异
git diff
比较的是暂存区和历史区的差异
git diff --cached
比较的是历史区和工作区的差异(修改)
git diff master
合并分支: