Git

教程:
Git深入体验之旅一:Git起步 https://blog.csdn.net/gtsong/article/details/13997497

GIT
git最佳实践,git一次提交只干一件事,要不然git就沦为文件备份仓库,而不是项目管理仓库
隐藏的.git目录叫做git版本库,又叫仓库,repository。
.git的父文件夹下的区域称为工作区。换言之,.git所在的目录就是工作区的根目录


Git与SVN的不同是:git的每个版本保存的是文件快照,如果某个版本文件未改动,则引用上个版本该文件的索引,
                                 而svn每个版本保存的是文件的内容变化数据
Git有三个区域:工作区域,暂存区(staged or index),本地仓库区,
暂存区和仓库区的工作原理:
暂存区有个目录索引树(index),仓库区也有个目录索引树(例如master索引树),还有一个放了具体数据的object对象集合,当暂存区和仓库区的数据状态不一致时,它们的索引分别指向不同的object,当他们的状态一致时指向同一个object,也就是暂存区是.git下虚拟出来的一个工作区。
文件有四个状态:已提交,已修改,已暂存,未追踪
配置git:
git配置文件可放在三个地方:/etc/gitconfig,  ~/.gitconfig, .git/config
配置文件采用INI文件格式,编辑不同的文件可使用git config -e [--local | --global | --system]
分别对应的设置命令: git config --system optionname optionvalue
                                   git config --global  optionname optionvalue
                                     git config --local optionname optionvalue
查看已配置项:git config --list 
获取帮助:git help config
git config --global user.name "lewis lv" (key user.name中的user是ini文件中的section)
git config --global user.email   lewis@gmail.com
git config --global alias.ci commit (给命令取别名)

创建仓库两种方式:
git init 这种生成的仓库里的文件都是untracked状态,可使用git status查看文件状态
git clone url,此url支持git协议,https协议,user@server:/path--ssh协议

git add filename 是将文件变为tracked状态的子状态已暂存状态。
git commit filename -m 'comments'
如果要忽略某些文件提交到仓库,可以创建.gitignore文件
git commit --amend --allow-empty --reset-author
amend表示对前一次提交进行修补,不产生新的提交(但是commit ID不是前一次的ID)
allow-empty表示允许空白提交,因为这条提交只是为了修提交的用户信息
reset-author表明修补提交是要修改author信息

git grep "search content"搜索工作区中的文件内容

git clone demo1 demo2使用clone可以在本地做备份

git diff 工作区与暂存区比较
git diff --cached或--statged 暂存区与仓库区比较
git diff HEAD 工作区与仓库区比较
HEAD一般表示当前当前版本库(分支)的头指针, master表示master分支

git checkout <file> 从暂存区拉取覆盖到工作区
git checkout HEAD <file> 从仓库区拉取 覆盖 到暂存区和工作区
git reset <file> (或者git reset HEAD)从仓库区拉取覆盖到暂存区
git clean -fd 清除工作区中untrack的文件和目录
git commit -a -m 'comments' 是不经过暂存,直接将已修改文件提交仓库
git rm filename 删除暂存区和工作区的文件
git rm --cached filename   删除暂存区文件,工作区文件不变
git mv file-from file-to

git log --pretty=raw显示日志原生信息
git stash 保存当前进度(先保存工作区与暂存区的内容后再与仓库区同步)
git stash list显示所有暂存进度
git stash pop恢复上一个进度
git stash apply stash@{2}恢复日志里的第二个暂存进度

Object对象里有三种类型的ID: commit id, tree id, blob id,它们的关系是commit id -> tree id (当前commit id所指向的blob id的集合,如果这次提交的内容没有改变,它的blob id也不会变化) -> blob ids,下面是使用git命令显示object 对象里的内容 
查看某个id是什么类型: git cat-file -t <id>
git cat-file -p <commit id>显示commit id对应的提交信息,里面包括commit id, tree id, parent id, author info, commit comments
git cat-file -p <tree id> tree id是在commit id显示的提交信息里存放,该命令显示当前tree id下的blob id的集合
git cat-file -p <blob id> 显示当前blob id对象的文件里的具体内容

如果当前分支是master,则<workspace>/.git/HEAD文件里和<workspace>/.git/refs/heads/master的内容是相同的,都存放的是最新一次提交的commit id, 如果想使用git命令查看当前最新提交:git rev-parse [master | refs/heads/master | HEAD]
最后一次提交内容:git cat-file commit HEAD

commit id的生成:(printf "commit `git cat-file commit HEAD|wc -c`\000";git cat-file commit HEAD)|sha1sum
 blob id的生成 (printf "blob `git cat-file blob HEAD:welcome.txt|wc -c`\000";git cat-file blob HEAD:welcome.txt)|sha1sum
 tree id的生成 (printf "tree `git cat-file tree HEAD^{tree}|wc -c`\000";git cat-file tree HEAD^{tree})|sha1sum

对于cat-file和rev-parse子命令可以跟个参数HEAD或者[commit id | blob id | tree id],可以对这个参数进行运算,用法如下:
HEAD^表示上次提交,HEAD^^表示HEAD^的你提交,还有其它运算符,具体可参见<<git权威指南P91>>

git reset HEAD^回滚到上一个版本,借助reflog命令恢复
git reflog show master显示操作日志(.git/logs/refs/heads/master)
git reset --hard master@{2}   重置到操作日志里对应@{2}的位置的<commit id>提交处


git checkout <commit id> 分离头指针从<commit id>
git checkout <branch name>切换到某个branch
git merge <commit id> 合并<commit id>指向的分离路径到当前分支
git checkout -b <branch name> <commit id>创建分支并检出
git checkout不加任何参数,表示检测当前分支的(工作区和暂存区)与仓库区所有不一致的文件

git clone --bare <repository> <directory.git>备份不带工作区的版本库
git init --bare <directory.git>创建不带工作区的裸版本库


git remote add origin git@github.com:venlv2046/siyuel.git
git push -u origin master
创建多个ssh key为github下的单个账号下的多个repository: 首先ssh-keygen -f id_siyuel,ssh-keygen -f id_fyy
再在.ssh下创建config文件,内容为:
Host siyuel
HostName github.com
User git
IdentityFile ~/.ssh/id_siyuel
Host fyy
HostName github.com
User git
IdentityFile ~/.ssh/id_fyy

============================================================================================
git log -p -2
-2最近的两次提交
-p打印出diff内容
============================================================================================

============================================================================================

============================================================================================

============================================================================================

============================================================================================

============================================================================================

============================================================================================

============================================================================================

============================================================================================

============================================================================================

============================================================================================

============================================================================================

============================================================================================

============================================================================================

============================================================================================

============================================================================================

============================================================================================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值