导航
导航
文章目录
  1. 一、Git 基础要点
    1. 1.1、直接快照非比较差异
    2. 1.2、三种文件状态
    3. 1.3、典型工作流程
  2. 二、Git 安装与初始化
    1. 2.1、安装方法
    2. 2.2、git 中文本地化
    3. 2.3、全局配置
    4. 2.4、密钥配置
    5. 2.5、自动完成
    6. 2.6、命令别名
  3. 三、Git 基础使用
    1. 3.1、常规操作
      1. 3.1.1、创建Git项目
      2. 3.1.2、检查当前文件状态
      3. 3.1.3、跟踪新文件
      4. 3.1.4、忽略某些文件不跟踪
      5. 3.1.5、暂存已修改文件
      6. 3.1.6、查看已暂存和未暂存差异
      7. 3.1.7、删除/移动已跟踪文件
      8. 3.1.8、提交更新
      9. 3.1.9、查看提交历史
      10. 3.1.10、查看版本细节
    2. 3.2、撤销操作
      1. 3.2.1、修改最后一次提交
      2. 3.2.2、取消已经暂存的文件
      3. 3.2.3、取消对文件的修改
    3. 3.3、远程仓库的使用
      1. 3.3.1、查看项目的远程库
      2. 3.3.2、添加远程仓库
      3. 3.3.3、从远程仓库抓取数据
      4. 3.3.4、推送数据到远程仓库
      5. 3.3.5、查看远程仓库信息
      6. 3.3.6、远程仓库的删除和重命名
    4. 3.4、本地标签管理
      1. 3.4.1、显示已有的标签
      2. 3.4.2、新建标签
      3. 3.4.3、后期加注标签
      4. 3.4.4、签署验证标签
      5. 3.4.5、推送标签至远程仓库
      6. 3.4.6、删除标签
  4. 四、GIt 分支管理
    1. 4.1、新建本地分支
    2. 4.2、合并本地分支
    3. 4.3、解决合并冲突
    4. 4.4、合并远程分支
    5. 4.5、删除远程分支
    6. 4.6、创建跟踪分支
    7. 4.7、查看分支
    8. 4.8、衍合所在分支

Git 使用指南

Git 是一个分布式版本控制系统,可以记录文件变化,以便在需要时退回过去某个时间点的状态,它与SVN最大不同在于,GIT是直接快照,而非比较差异,因此它拥有许多令人兴奋的特性,如简便的分支管理、高效率的分布式控制等等。

本文是 《Pro Git》 阅读笔记整理,重点介绍 Git基础使用、Git分支管理、Git分布式工作流程。

一、Git 基础要点

1.1、直接快照非比较差异

Git 只关心文件数据的整体是否发生变化,而SVN关心的是文件内容具体差异。

1.2、三种文件状态

已提交(committed ),已修改(modified )和已暂存( staged )。

1.3、典型工作流程

新文件–已暂存–已提交–已修改–已暂存–已提交 …

二、Git 安装与初始化

2.1、安装方法

apt-get -y install git-core git-gui
yum -y install git git-gui
Mac: http://code.google.com/p/git-osx-installer
Windowns: http://code.google.com/p/msysgit

2.2、git 中文本地化

#获取中文本地化文件
curl -L https://github.com/gotgit/git-po-zh_CN/raw/maint-zh-cn/po/zh_CN.po > zh_CN.po

#将zh_CN.po文件复制到Git源码的po目录
cp zh_CN.po path/to/git/po/

#编译及安装 git,然后就可以让Git说中文了。
cd path/to/git/
make all && sudo make install

2.3、全局配置

  • /etc/gitconfig :系统中对所有用户都适用的配置文件,使用–system选项。
  • ~/.gitconfig :用户目录下的配置文件只适用于该用户,使用–global选项。
  • .git/config :当前项目的.git目录中的配置文件,仅针对当前项目有效。
git config --global user.name "WangYan"
git config --global user.email "WangYan@example.com"
git config --global core.editor vim
git config --global merge.tool vimdiff

2.4、密钥配置

首先生成密钥对,然后上传.pub后缀的公钥,到github这类托管平台。

mkdir ~/.ssh && cd ~/.ssh
ssh-keygen -t rsa -C "WangYan@example.com" -N '' #生成密钥对

测试密钥是否有效,并提示密钥所属用户ID或所属版本库ID

ssh -T git@github.com

2.5、自动完成

#wget http://blog.wangyan.org/download/conf/.git-completion.bash
cp contrib/completion/git-completion.bash ~/.git-completion.bash
cat >>~/.bashrc<<EOF
source ~/.git-completion.bash
EOF

2.6、命令别名

git config --global alias.ci commit #实例1:ci 提交
git config --global alias.last 'log -1 HEAD' #实例2:查询最新版本
git config --global alias.visual "!gitk" #实例3:运行外部命令 

三、Git 基础使用

3.1、常规操作

3.1.1、创建Git项目

git init #从当前目录初始化
git clone git://gist.github.com/xx.git #从现有仓库克隆

3.1.2、检查当前文件状态

git status
  • Untracked files:表示未跟踪文件。(新文件)
  • Changes to be committed:表示已暂存,但未提交。(已git add,但未提交)
  • Changed but not updated:已修改,但未暂存(文件已修改,未git add暂存)

3.1.3、跟踪新文件

git add file1.txt(文件或目录的路径,目录则递归处理)
git add .(跟踪所在目录下的所有文件及子目录)

3.1.4、忽略某些文件不跟踪

cat >.gitignore<<-EOF
# 忽略注释
*.a 忽略所有.a 结尾的文件
*.[oa] 忽略所有以.o 或.a 结尾的文件
!lib.a 忽略除lib.a 外的文件
/TODO 忽略根目录下的TODO 文件
build/ 忽略build/ 目录下的所有文件
doc/*.txt 忽略doc/notes.txt
EOF

3.1.5、暂存已修改文件

注:git add 既可以跟踪新文件,也可以暂存已修改文件。

git add .

3.1.6、查看已暂存和未暂存差异

git diff:查看未暂存和已暂存文件间的差异。
git diff --cached 查看已暂存和上次提交时的差异

3.1.7、删除/移动已跟踪文件

git rm file.txt
git rm -f file.txt 强制删除,适用于已修改且已暂存。
git rm --cached file.txt 从跟踪清单中删除,但不实际删除文件。
git rm *~ 删除当前目录下所有~结尾的文件。
git rm \*~ 递归删除当前目录及子目录下所有~结尾的文件。
git mv file1 file2 #移动文件

3.1.8、提交更新

git commit
git commit -m "Story 1: Fix some bugs"

跳过暂存直接提交

git commit -a -m "Story 2: Fix some bugs"

3.1.9、查看提交历史

git log 按提交时间列出所有的更新,最近的更新排在最上面。

-p 展开显示每次提交的内容差异。
-n 仅显示最近的n 条提交。
--stat 仅显示简要的增改行数统计。
--author 仅显示指定作者相关的提交。
--committer 仅显示指定提交者相关的提交。
--grep 搜索提交说明中的关键字。
--all-match 同时满足指定的选项。

git log --since=2.weeks
git log --since="2008-10-01" --before="2008-11-01"

--since, --after 仅显示指定时间之后的提交。
--until, --before 仅显示指定时间之前的提交。

3.1.10、查看版本细节

git show xx 查看项目特定版本更新细节
git show HEAD 显示当前分支的最新版本的更新细节

git show HEAD^ 查看HEAD 的父版本更新细节
git show HEAD^^ 查看HEAD 的祖父版本更新细节
git show HEAD~4 查看HEAD 的祖父之祖父的版本更新细节

3.2、撤销操作

3.2.1、修改最后一次提交

git commit --amend

注:若文件状态没变化,则修改提交说明,否则修正并覆盖上次提交。

3.2.2、取消已经暂存的文件

git reset HEAD filename

3.2.3、取消对文件的修改

git checkout -- filename

3.3、远程仓库的使用

3.3.1、查看项目的远程库

git remote -v (-v 选项显示对应远程库地址)
实例:origin git://github.com/schacon/ticgit.git

3.3.2、添加远程仓库

git remote add [shortname] [url]
实例:git remote add pb git://github.com/paulboone/ticgit.git

3.3.3、从远程仓库抓取数据

从指定远程仓库中拉取所有本地仓库没有的数据。

git fetch [remote-name]

注意事项:

  • 如果是克隆了一个仓库,此命令会自动将远程仓库归于 origin 名下。
  • fetch 命令只拉取数据,不会自动合并到当前工作分支。
  • git clone 本质是创建本地 master 分支,并用于跟踪远程仓库中的 master 分支。

3.3.4、推送数据到远程仓库

git push [remote-name] [branch-name]
实例:git push origin master

注:克隆操作会自动使用默认的master仓库和origin分支名称

3.3.5、查看远程仓库信息

git remote show [remote-name]

1)New remote branches
哪些远端分支还没有同步到本地

2)Local branch pushed with ‘git push’
运行git push 时缺省推送的分支

3)Stale tracking branches
已同步到本地的远端分支在远端服务器上已被删除。

3.3.6、远程仓库的删除和重命名

git remote rename [remote-name] [new-remote-name] #重命名
git remote rm [remote-name] #删除

3.4、本地标签管理

3.4.1、显示已有的标签

git tag #按字母顺序显示
git tag -l 'v1.4.2.*' #显示特定标签 

3.4.2、新建标签

git tag v1.4  #轻量级的标签 
git tag -a v1.4 -m 'my version 1.4' #含附注的标签

3.4.3、后期加注标签

git tag -a v1.2 9fceb02

3.4.4、签署验证标签

git  -s v1.5 -m 'my signed 1.5 tag' #签署标签
git tag -v [tag-name] #验证标签
git show [tag-name] #查看相应标签的版本信息

3.4.5、推送标签至远程仓库

git push origin [tagname] #推送某个标签
git push origin --tags #推送所有标签

3.4.6、删除标签

git tag -d v1.0.0 #删除本地标签
git push origin :refs/tags/v1.0.0 #删除远程标签

四、GIt 分支管理

4.1、新建本地分支

git branch testing #创建testing分支
git checkout testing #切换至testing分支
git checkout -b iss53 #创建并切换至iss53分支。

4.2、合并本地分支

git checkout master  #首先切换到主分支
git merge hotfix #测试完毕后,合并hotfix分支
git branch -d hotfix #删除已合并的hotfix分支

4.3、解决合并冲突

git status #合并失败的文件以"unmerged"标出
git add . #标记冲突已解决,并暂存文件
git mergetool #Git默认图形化冲突解决工具

4.4、合并远程分支

origin/master #格式:远程仓库/分支名
git merge origin/serverfix #合并远程分支serverfix到当前分支

4.5、删除远程分支

#git push [远程仓库名] :[远程分支]
#注意区别:git push [远程名] [本地分支]:[远程分支]
git push origin :serverfix #删除远程分支

4.6、创建跟踪分支

方法一:

git checkout -b [分支名] [远程名]/[分支名]
git checkout -b serverfix origin/serverfix

方法二:(适用1.6.2以上版本Git)

git checkout --track [远程名]/[分支名] 
git checkout --track origin/serverfix

4.7、查看分支

git branch #列出所有分支,星号"*"表示当前所在分支。
git branch -v #查看各分支最后一次提交信息

#查看已和当前分支合并的分支
#可用git branch -d 删掉未标星号的分支,因为已经合并了。
git branch --merged 

#查看未和当前分支合并的分支
#强制删除未合并的分支git branch -D
git branch --no-merged 

4.8、衍合所在分支

git checkout experiment #切换到需要衍合的分支
git rebase master #衍合experiment分支到主分支
支持一下
扫一扫,支持一下