git工作手册
1.git初始化配置
1.1用户信息
$git config --global user.name "beolus"
$git config --global user.email "xxx@163.com"
1.2查看配置信息
$git config user.name
beolus
$git config --list
1.3git提交信息模板配置
# 先创建模板文件,自定义设置内容格式
$vi $HOME/.gitmessage.txt
$git config --global commit.template $HOME/.gitmessage.txt
# 当提交时,直接"git commit"即可
$git commit
1.4查看帮助
# 两种方式:以git config命令为例
$git help config
$git config --help
2.在服务器配置git
2.1本地协议
# 克隆本地仓库
$ git clone c:/local/proj.git
2.2ssh协议
# 如果想要有写入操作权限,一般使用ssh协议。不指明默认是ssh协议
$git clone ssh://user@server:project.gt
2.3其他协议
git协议与http(s)协议:略
2.4生成ssh公钥
$ssh-keygen
$cat ~/.ssh/id_rsa.pub
2.5git托管服务
以github为例,在其上面托管testproj项目
- 在github建立一个个人用户
- 建立新仓库testproj
- 把本地项目推送到远程仓库testproj,如下操作:
$ cd ~/testproj
$git init
$git add .
$ git commit -m 'first commit'
$git remote add origin remote_url
$git push origin master
3.git常用操作
文件状态周期,如下图1
3.1忽略某些文件:.gitignore
.gitignore文件规范
示例:
3.2常用操作
# 查看状态
$git status
# 功能有三:1.追踪新文件;2.把已追踪的文件添加到暂存区;3.合并时把有冲突的文件标为已解决状态
$git add file
# 比较的是当前改动和上次提交、或当前改动和暂存区快照之间的差异
$git diff [file]
# 比较的是暂存区与上一次提交快照的差异
$git diff --cached
# 提交更新
$git commit -m 'xx'
git diff示例:
3.3移除文件
移除已追踪的文件:
从git仓库移除,保留在工作目录
3.4查看提交历史
# -p:表示展开每次提交的内容差异,-2:表示查看最近两次的提交
$git log -p -2
# --stat:仅显示简要的增改行数统计
$git log --stat
# --pretty=oneline:每个提交按一行显示
$git log --pretty=oneline
# --since='xx': 显示最近多久的提交记录
$git log --since=15.minutes
3.5撤销操作
-
git commit --amend, 作用:修改最后一次提交信息,且如果暂存区有更新文件,会这次的更新也合到本次提交。
-
git reset HEAD file, 取消已经暂存的文件的更改
-
git checkout – file, 取消本地目录的文件的更改(未加入到暂存区)
3.6远程仓库的使用
# 查看远程仓库
$git remote -v
# 添加远程仓库
$git remote add [remote_name] [remote_url]
# 从远程仓库抓取数据:
$git fetch [remote_name]
# 推送数据到远程仓库
$git push [remote_name] [branch_name]
# 查看远程仓库信息:
$git remote show remote_name
# 远程仓库的重命名和删除
$git remote rename old_name new_name
$git remote rm remote_name
3.7打标签
# 列出已有标签
$git tag
# 列出指定标签
$git tag -l ‘v1.1.*’
# 新建标签
$git tag -a v1.1 [-m ‘first tag’]
# 查看标签
$git show v1.1
# 分享标签
$git push origin v1.1
# 同步所有标签
$git push origin --tags
4.git分支
# 创建新分支:
$git branch xx 只是创建分支
$git checkout -b xx 创建分支,并切换到xx分支
$git checkout -b dev origin/master 基于远程某个分支创建分支
# 合并分支:
$git merge xx
# 删除分支:
$git branch -d xx
$git branch -D xx 强制删除(即使分支并未被合并)
$git push origin :dev 删除远程分支
# 查看分支:
$git branch
$git branch -v 查看各个分支及最后一次commit信息
$git branch --merge 查看合到当前分支的分支有哪些
$git branch --no-merged 查看未合到当前分支的分支有哪些
# 推送:
$git push (远程仓库名) (分支名)
$git push origin dev:dev
# 衍合:
$git checkout dev
$git rebase master 把master变化衍合到dev
$git checkout master
$git merge dev fast forward,快进切到最新的提交
$git branch -d dev
5.多人合作开发
- fork一份公共仓库(public/test)的项目到个人仓库(myself/test)
- 在本地把个人仓库项目克隆下来,并添加远程仓库
# 1.克隆个人仓库项目
$git clone myfork ssh:xxx/myself/test
# 2.添加远程仓库
$git remote add origin ssh:xxx/public/test
# 3.获取远程仓库的更新
$git fetch origin
# 4.把更新同步到本地
$git rebase origin/master
# 5.推送更改到个人仓库
$git push [-f] myfork master
# 6.在代码托管平台发起合并请求,让管理员合并到公共仓库
图片来源于《Pro Git》 ↩︎