简图记录学习,部分内容参考 《git 权威指南》
目录
一、概念
1、什么是git
2、一些基础git概念 .git/文件状态/索引区暂存/分支/HEAD
二、使用git前准备工作
1、git的安装(Linux环境)
2、git的配置(写入~/.gitconfig)
3、创建仓库 git init/ git clone
三、git的基本操作
1、信息查看 log/status/diff /show/remote/blame
2、修改提交 add/commit/push/checkout/reset/pull
3、工作状态 暂存与恢复 stash/pop
4、分支管理 branch/checkout/merge
5、提交忽略管理 .gitignore
四、相关工具 github/repo/gerrit
1、代码托管github
2、仓库管理repo
3、视检支持gerrit
git:目前主流的一个完全分布式代码版本管理系统,提供方便的分支管理控制,linux作者Linus创建。
完全分布式优势: 每次clone都是一次对仓库完整备份,不需要网络就可以 做版本比较、历史记录查看、提交记录分析、分支的创建 合并 切换等。
git支持的传输方式:1、本地mount 2、ssh(加密、快速)3、git协议 4、https
git帮助查看:安装git后可以用man查看帮助,如git reset 命令,用man git-reset;
.git:git init或者clone后,会出现一个.git目录,这个目录是Git来跟踪管理版本库。
文件状态:体现了一个 文件是否被修改 修改是否暂存 等。通过git status 可以查看,具体修改代码差异对比可以git diff查看。
索引区/暂存:我们修改了很多文件,但是只希望把其中一部分修改提交上去,index(或者stage)索引区就是做这个统计的,使用git add filename 把文件放入 索引区进行暂存,然后再使用git commit 就可以让暂存文件 生成一次本地提交。
HEAD与回退:指向当前工作节点的指针,上一个版本就是HEAD^,上上一个版本就是HEAD^^,也可以用HEAD~2表示。git reset HEAD~1 可以回退到上一个提交节点,但是回退前后的差异 被以 编辑的方式保留,可以通过git diff查看。(如果回退过程带上--hard参数,会清空这些修改,代码状态合所回退的节点一致)
使用包管理器安装:sudo apt-get install git (也可以 从源码安装 或者 git clone版本库方式安装)
常用配置
用户名称(必须):git config --global user.name xxxx
配置邮箱(必须):git config --global user.email xxxx
编辑器:git config --global user.editor xxxx(vim)
差异检查:git config --global user.tod xxxx(vimdiff)
通过克隆方式创建:git clone
本地新建:建库git init; (添加文件git add xxx; 提交修改git commit)
goodboy@ubuntu:~/git_study$ git init
Initialized empty Git repository in /home/goodboy/git_study/.git/
goodboy@ubuntu:~/git_study$ ls -al
total 12
drwxrwxr-x 3 goodboy goodboy 4096 Jun 12 08:32 .
drwxr-xr-x 5 goodboy goodboy 4096 Jun 12 08:32 ..
drwxrwxr-x 7 goodboy goodboy 4096 Jun 12 08:32 .git
查看日志 git log; 查看文件状态(修改/暂存) git status; 查看差异改动git diff (--staged 比较暂存区文件与上一次commit);
看文件变动 git watchchanged xxx;查看某次提交信息 git show [commitid];查看远程仓库信息 git remote (-v)
显示文件的每一行最后修改的版本和作者 git blame xxx;
常见操作如下图:
(1)修改文件,通过git status可以看到哪些文件修改了 暂存了,git diff 可以看差异。取消修改用git checkout xxx
(2)将新文件或者修改文件放入索引区 git add xxx ;把索引区文件释放回去 git reset;
(3)将索引区文件提交到本地仓库 git commit (-s log中带有差异文件标识;-m[信息] 带信息直接提交;--amend追加到上次本地提交);如果要取消暂存区修改,也可以用git checkout
(4)将本地提同步远程仓库 git push [库名] [分支名],把远程仓库修改同步到本地 git pull
(5)把本地当前分支 回退到某一次提交 git reset (--hard回退同时不保留回退前后差异 ) [目标提交节点]。
git reset HEAD~1 可以回退到上一个提交节点,但是回退前后的差异 被以 编辑的方式保留,可以通过git diff查看。(如果回退过程带上--hard参数,会清空这些修改,代码状态合所回退的节点一致)
当我们工作到一半,希望完整的查看工作前的文件(git diff只能看差异)。
可以使用git stash命令,把当前修改状态全部放到临时区域 (让本地代码状态 无任何修改 暂存记录),然后通过 git pop恢复。
查看当前全部分支 git branch(-a 详细内容); 创建分支 git branch [分支名]; 删除分支 git branch -d [分支名]
切换到某分支 git checkout [分支名称]; 合并分支改动 git merge [需要同步到当前分支的分支名];
例如:在开发分支dev上的代码达到上线的标准后,要合并到 master 分支
git checkout dev
git pull
git checkout master
git merge dev
git push -u origin master
创建.gitignore文件 用于指导屏蔽哪些文件 不被git status,git add 识别,写法如下
#注释,不起实际作用
*.a #忽略扩展名称为.a文件
!lib.a #反向包含,不能忽略lib.a文件
/a.txt #忽略项目根目录下的a.txt文件
build/ #忽略build文件夹下全部文件
doc/.txt #忽略doc目录下.txt将文件,但是doc子目录不包含在内,如doc/a/.txt
提供免费的个人公有仓库托管平台,使用流程:
1、注册账号(添加ssh共钥),创建一个仓库(得到git)
2、本地创建git项目:如git init\git add\git commit
3、添加远程仓库:git remote add origin [email protected]
4、推送:git push origin master
5、在github上合入
google开发的git版本管理工具(远程库管理),常用命令:
初始化repo仓库 repo init
同步repo仓库代码到本地 repo sync
启动本地工作分支 repo start
上传 repo upload
基于web的代码review即版本控制系统