Git简易教程
2014-06-20 18:00
465 查看
1. 安装
1). Ubuntu
sudo apt-get instal git
2). 配置
git config --global user.name "Your Name"
git config --global user.email "Your Email"
2. 创建版本库
1). 创建目录
mkdir myrespo
2). 初始化版本库
cd myrespo
git init
3). 创建文件
vi readme.txt
在myrespo目录下创建一个readme.txt文件,内容如下:
Git is version control system.
Git is free software.
4). 添加修改的文件到stage区域
git add readme.txt
5). 将stage区域中的文件commit到本地的master分支中
git commit -m 'wrote a readme file'
提交变更到本地仓库,并附有提交信息
6). 查看本地工作区的文件修改状态
git status
7). 查看文件的不同情况
git diff file
8). 查看commit记录
git log
or
git log –pretty=oneline
3. 时光机穿梭
1). 回退版本
git reset --hard HEAD^
HEAD:代表当前版本
HEAD^:代表上一个版本
HEAD^^:代表上上个版本
HEAD~100:代表前100个版本
2).查看记录的命令操作记录
git reflog
场景:
当你之前恢复到之前的版本,第二天后悔了,通过这个命令查看到昨天的操作指令,指令中有commit id, 这样就可以通过git reset --hard commit_id回到最新的版本
3).缓存区
git init创建一个git repository之后,我们称这个目录为工作区,在这个工作区中包含一个版本库,版本库中包含stage缓存区和master分支,当我们git add文件时,我们只是把文件 加载到stage中,而git commit时,我们是将存放到stage的文件,提交到master分支上。
4).丢弃工作区的修改
场景:
当你在readme.txt文件中添加了如下文本:
my stupid boss still prefers SVN.
当你查看git status时可以查看到哪些文件已经在工作区中修改过了,我们这个例子比较简单 但是当你修改的文件过多时,那么丢弃敏感信息就不那么容易了,这个时候使用如下命令就可以丢弃对工作区的修改:
git checkout – file
注意:git checkout无参数时,是创建一个分支,记着是两个-
5).丢弃stage中的文件修改
场景:
在4中,你在git add file之前发现问题,那么如果当你git add文件后,才发现问题的严重性时,我们需要使用如下的命令,将丢弃stage中文件的修改:
git reset HEAD file:将已提交到stage中的文件修改丢弃,文件会回到工作区域,之后就需要通过11的操作将敏感数据丢弃掉。
6).删除文件和无删除文件后恢复到删除文件之前
git rm file:删除文件
当误删除文件时,通过11的操作丢弃对工作区的修改,git checkout – file就可以将误删除的文件恢复了
总结4和5:
1. 当你该乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file。
2. 当你不但乱改了工作区某个文件的内容,还添加了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了第4条,第二步按第4条操作。
4. 远程仓库
1). 创建SSH Key(Ubuntu)
ssh-keygen -t rsa -C “youremail@example.com”
将id_rsa.pub中的字符串存放到你的github账户中的ssh管理中
2).将本地的repository与github的repository进行关联,首先需要在github上建立一个repository,建立的操作比较简单,照着做就可以了。
> 进入到本地仓库的目录
cd Local Repository Directory
> 建立本地仓库与远程仓库的关联,origin代表远程的仓库名
git remote add origin https://github.com:Your Name/Remote Repository Name.git
> 将本地仓库的所有文件推送到远程仓库中,将本地master分支的文件推送到远程的orgin,第一次需要添加-u参数,它会将本地master分支的文件更新到远程仓库的master分支上,还会将本地的master分支与远程的master分支进行关联
git push -u origin master
说明:
Local Repository Directory:本地仓库的仓库目录地址
Your Name:这个是你在github的名称
Remote Repository Name:github上的仓库的名称
从现在起,只要本地做了提交,就可以通过命令:
git push origin master
3).从远程仓库clone一个项目
当你在github上创建一个项目时,我们想查看项目时,可以通过如下代码将远程的项目clone到本地一份
git clone https://github.com/Your Name/Project Name.git
说明:
Your Name:项目创建者的github账户名称
Project Name:项目名称
github提供很多种协议来进行数据的传输,默认采用ssh,我们这里采用的https
5. 分支管理
1). 创建分支并切换到分支
git checkout -b dev
or
git branch dev
git checkout dev
2). 查看当前分支
git branch
3). 将master分支合并到最新的dev分支
> 切换回到master分支
git checkout master
> 将master分支合并到最新的dev分支,当合并信息中包含Fast-forward为快速合并,及master指针直接指向dev分支
git merge dev
4). 合并分支后,将不再使用的分支删除
> 删除dev分支
git branch -d dev
5). 当处理完冲突之后,使用如下命令查看冲突的内容
git log --graph --pretty=oneline –abbrev-commit
6). 当使用git merge name时,如果是Fast-forward合并方式,那么合并并不会记录除master分支的分支信息,使用如下命令将创建一个新的commit,并且要求输入commit message信息
git merge –no-ff -m “merge with no-ff” dev
git log –graph –pretty=online –abbrev-commit
7). Bug分支
场景:当前你正在dev分支上开发东西,但是现在有一个紧急bug需要修复,这个时候我们可以将正在做的dev分支进行储存,然后新建bug分支处理bug,等处理完bug,将储存的dev分支重新提取出来接着进行开发
> 储存dev分支
git stash
> 假定在master上处理bug
git checkout master
git checkout -b issue-101
/* 修复bug */
> 修复完bug后,切换回master分支,合并分支,删除bug分支
git checkout master
git merge –no-ff -m “merged bug fix 101” issue-101
git branch -d issue-101
> 提取存储的dev分支
git checkout dev
git stash list // 查看存储的分支信息
提取有两种方法:
git stash apply,但stash内容并不删除,需要git stash drop删除
git stash pop提取并删除
git stash //再次查看存储列表
8). Feture分支
场景:当我们开发新功能时,我们希望新建一个功能分支在上面开发,完成后,合并,最后删除该分支。但是如果当你完成新功能时,准备合并到dev分支时,突然,由于种种原因,新功能目前不能添加。那么这个时候需要删除心功能分支,当你用git branch -d name时,错误提示,当前分支并没有与其他分支进行合并,如果想彻底删除该分支,需要使用-D参数
9). 多人协作的工作模式通常是这样:
首先,可以试图用git push origin branch-name推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。
10). 标签管理
> 分支内打标签
git checkout name
git tag tag_name
> 根据commit id打标签
场景:如果现在是周五,但是本来周一打的标签没有打,通过git log查看到commit id后,然后通过命令git tag tag_name commit_id进行对特定commit打标签
11). 查看所有的tag
git tag
12). 根据tag_name查看commit信息
git show tag_name
13). 打标签的同时,添加标签消息
git tag -a tag_name -m “message” commit_id
14). 删除本地标签
git tag -d tag_name
15). 推送标签到远程
git push origin tag_name
or
git push origin –tags:一次性推送所有的标签
16). 删除远程标签
git push origin :refs/tags/tag_name
6. 过滤文件
https://github.com/github/gitignore有完整的说明,只需要根据自己的实际情况将内容填入到.gitignore文件中
7. 配置别名
st表示status,co表示checkout,ci表示commit,br表示branch,unstage表示将修改恢复到工作区,last表示显示最后一次提交的log信息,lg表示新的日志信息显示格式:
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.unstage 'reset HEAD'
git config --global alias.last 'log -1'
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
8 分支总结
查看分支:git branch
创建分支:git branch name
切换分支:git checkout name
创建+切换分支:git checkout -b name
合并某分支到当前分支:git merge name
删除分支:git branch -d name
9 . 标签总结
命令git tag name用于新建一个标签,默认为HEAD,也可以指定一个commit id;
-a tagname -m "blablabla..."可以指定标签信息;
-s tagname -m "blablabla..."可以用PGP签名标签;
命令git tag可以查看所有标签;
命令git push origin tagname可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d tagname可以删除一个本地标签;
命令git push origin :refs/tags/tagname可以删除一个远程标签。
10. 版权所属
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
1). Ubuntu
sudo apt-get instal git
2). 配置
git config --global user.name "Your Name"
git config --global user.email "Your Email"
2. 创建版本库
1). 创建目录
mkdir myrespo
2). 初始化版本库
cd myrespo
git init
3). 创建文件
vi readme.txt
在myrespo目录下创建一个readme.txt文件,内容如下:
Git is version control system.
Git is free software.
4). 添加修改的文件到stage区域
git add readme.txt
5). 将stage区域中的文件commit到本地的master分支中
git commit -m 'wrote a readme file'
提交变更到本地仓库,并附有提交信息
6). 查看本地工作区的文件修改状态
git status
7). 查看文件的不同情况
git diff file
8). 查看commit记录
git log
or
git log –pretty=oneline
3. 时光机穿梭
1). 回退版本
git reset --hard HEAD^
HEAD:代表当前版本
HEAD^:代表上一个版本
HEAD^^:代表上上个版本
HEAD~100:代表前100个版本
2).查看记录的命令操作记录
git reflog
场景:
当你之前恢复到之前的版本,第二天后悔了,通过这个命令查看到昨天的操作指令,指令中有commit id, 这样就可以通过git reset --hard commit_id回到最新的版本
3).缓存区
git init创建一个git repository之后,我们称这个目录为工作区,在这个工作区中包含一个版本库,版本库中包含stage缓存区和master分支,当我们git add文件时,我们只是把文件 加载到stage中,而git commit时,我们是将存放到stage的文件,提交到master分支上。
4).丢弃工作区的修改
场景:
当你在readme.txt文件中添加了如下文本:
my stupid boss still prefers SVN.
当你查看git status时可以查看到哪些文件已经在工作区中修改过了,我们这个例子比较简单 但是当你修改的文件过多时,那么丢弃敏感信息就不那么容易了,这个时候使用如下命令就可以丢弃对工作区的修改:
git checkout – file
注意:git checkout无参数时,是创建一个分支,记着是两个-
5).丢弃stage中的文件修改
场景:
在4中,你在git add file之前发现问题,那么如果当你git add文件后,才发现问题的严重性时,我们需要使用如下的命令,将丢弃stage中文件的修改:
git reset HEAD file:将已提交到stage中的文件修改丢弃,文件会回到工作区域,之后就需要通过11的操作将敏感数据丢弃掉。
6).删除文件和无删除文件后恢复到删除文件之前
git rm file:删除文件
当误删除文件时,通过11的操作丢弃对工作区的修改,git checkout – file就可以将误删除的文件恢复了
总结4和5:
1. 当你该乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file。
2. 当你不但乱改了工作区某个文件的内容,还添加了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了第4条,第二步按第4条操作。
4. 远程仓库
1). 创建SSH Key(Ubuntu)
ssh-keygen -t rsa -C “youremail@example.com”
将id_rsa.pub中的字符串存放到你的github账户中的ssh管理中
2).将本地的repository与github的repository进行关联,首先需要在github上建立一个repository,建立的操作比较简单,照着做就可以了。
> 进入到本地仓库的目录
cd Local Repository Directory
> 建立本地仓库与远程仓库的关联,origin代表远程的仓库名
git remote add origin https://github.com:Your Name/Remote Repository Name.git
> 将本地仓库的所有文件推送到远程仓库中,将本地master分支的文件推送到远程的orgin,第一次需要添加-u参数,它会将本地master分支的文件更新到远程仓库的master分支上,还会将本地的master分支与远程的master分支进行关联
git push -u origin master
说明:
Local Repository Directory:本地仓库的仓库目录地址
Your Name:这个是你在github的名称
Remote Repository Name:github上的仓库的名称
从现在起,只要本地做了提交,就可以通过命令:
git push origin master
3).从远程仓库clone一个项目
当你在github上创建一个项目时,我们想查看项目时,可以通过如下代码将远程的项目clone到本地一份
git clone https://github.com/Your Name/Project Name.git
说明:
Your Name:项目创建者的github账户名称
Project Name:项目名称
github提供很多种协议来进行数据的传输,默认采用ssh,我们这里采用的https
5. 分支管理
1). 创建分支并切换到分支
git checkout -b dev
or
git branch dev
git checkout dev
2). 查看当前分支
git branch
3). 将master分支合并到最新的dev分支
> 切换回到master分支
git checkout master
> 将master分支合并到最新的dev分支,当合并信息中包含Fast-forward为快速合并,及master指针直接指向dev分支
git merge dev
4). 合并分支后,将不再使用的分支删除
> 删除dev分支
git branch -d dev
5). 当处理完冲突之后,使用如下命令查看冲突的内容
git log --graph --pretty=oneline –abbrev-commit
6). 当使用git merge name时,如果是Fast-forward合并方式,那么合并并不会记录除master分支的分支信息,使用如下命令将创建一个新的commit,并且要求输入commit message信息
git merge –no-ff -m “merge with no-ff” dev
git log –graph –pretty=online –abbrev-commit
7). Bug分支
场景:当前你正在dev分支上开发东西,但是现在有一个紧急bug需要修复,这个时候我们可以将正在做的dev分支进行储存,然后新建bug分支处理bug,等处理完bug,将储存的dev分支重新提取出来接着进行开发
> 储存dev分支
git stash
> 假定在master上处理bug
git checkout master
git checkout -b issue-101
/* 修复bug */
> 修复完bug后,切换回master分支,合并分支,删除bug分支
git checkout master
git merge –no-ff -m “merged bug fix 101” issue-101
git branch -d issue-101
> 提取存储的dev分支
git checkout dev
git stash list // 查看存储的分支信息
提取有两种方法:
git stash apply,但stash内容并不删除,需要git stash drop删除
git stash pop提取并删除
git stash //再次查看存储列表
8). Feture分支
场景:当我们开发新功能时,我们希望新建一个功能分支在上面开发,完成后,合并,最后删除该分支。但是如果当你完成新功能时,准备合并到dev分支时,突然,由于种种原因,新功能目前不能添加。那么这个时候需要删除心功能分支,当你用git branch -d name时,错误提示,当前分支并没有与其他分支进行合并,如果想彻底删除该分支,需要使用-D参数
9). 多人协作的工作模式通常是这样:
首先,可以试图用git push origin branch-name推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。
10). 标签管理
> 分支内打标签
git checkout name
git tag tag_name
> 根据commit id打标签
场景:如果现在是周五,但是本来周一打的标签没有打,通过git log查看到commit id后,然后通过命令git tag tag_name commit_id进行对特定commit打标签
11). 查看所有的tag
git tag
12). 根据tag_name查看commit信息
git show tag_name
13). 打标签的同时,添加标签消息
git tag -a tag_name -m “message” commit_id
14). 删除本地标签
git tag -d tag_name
15). 推送标签到远程
git push origin tag_name
or
git push origin –tags:一次性推送所有的标签
16). 删除远程标签
git push origin :refs/tags/tag_name
6. 过滤文件
https://github.com/github/gitignore有完整的说明,只需要根据自己的实际情况将内容填入到.gitignore文件中
7. 配置别名
st表示status,co表示checkout,ci表示commit,br表示branch,unstage表示将修改恢复到工作区,last表示显示最后一次提交的log信息,lg表示新的日志信息显示格式:
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.unstage 'reset HEAD'
git config --global alias.last 'log -1'
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
8 分支总结
查看分支:git branch
创建分支:git branch name
切换分支:git checkout name
创建+切换分支:git checkout -b name
合并某分支到当前分支:git merge name
删除分支:git branch -d name
9 . 标签总结
命令git tag name用于新建一个标签,默认为HEAD,也可以指定一个commit id;
-a tagname -m "blablabla..."可以指定标签信息;
-s tagname -m "blablabla..."可以用PGP签名标签;
命令git tag可以查看所有标签;
命令git push origin tagname可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d tagname可以删除一个本地标签;
命令git push origin :refs/tags/tagname可以删除一个远程标签。
10. 版权所属
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
相关文章推荐