分支(Branch)
删除分支
- 删除远程分支:
git push origin :branchName # 删除远程分支
git push origin --delete new # 删除远程分支new
- 删除本地分支:
git branch -d branchName # 删除本地分支,强制删除用-D
git branch -d test # 删除本地test分支
git branch -D test # 强制删除本地test分支
git remote prune origin # 远程删除了,本地还能看到远程存在,这条命令删除远程不存在的分支
提交分支
将本地分支提交到远程主机中:
代码语言:javascript复制git push -u origin branchName # 提交分支到远程origin主机中
拉取分支
当远程分支已被删除,但本地仍存在同名分支时,使用以下命令自动清理:
代码语言:javascript复制git fetch -p #拉取远程分支时,自动清理 远程分支已删除,本地还存在的对应同名分支。
分支合并
将分支合并到当前分支:
代码语言:javascript复制git merge branchName # 合并分支 - 将分支branchName和当前所在分支合并
git merge origin/master # 在本地分支上合并远程分支。
git rebase origin/master # 在本地分支上合并远程分支。
git merge test # 将test分支合并到当前分支
分支重命名
重命名分支:
代码语言:javascript复制git branch -m old new #重命名分支
查看分支
- 列出本地分支:
git branch # 列出本地分支
- 列出远程分支:
git branch -r # 列出远端分支
- 列出所有分支:
git branch -a # 列出所有分支
- 查看各个分支最后一个提交对象的信息:
git branch -v # 查看各个分支最后一个提交对象的信息
- 查看已经合并到当前分支的分支:
git branch --merged # 查看已经合并到当前分支的分支
- 查看未合并到当前分支的分支:
git branch --no-merged # 查看为合并到当前分支的分支
- 查看remote地址和远程分支:
git remote show origin # 可以查看remote地址,远程分支
新建分支
代码语言:javascript复制git branch test # 新建test分支
git branch newBranch 3defc69 # 指定哈希3defc69,新建分支名字为newBranch
git checkout -b newBranch origin/master # 取回远程主机的更新以后,在它的基础上创建一个新的分支
git checkout -b newBranch 3defc69 # 以哈希值3defc69,新建newBranch分支,并切换到该分支
连接分支
建立本地分支与远程分支之间的链接:
代码语言:javascript复制git branch --set-upstream dev origin/dev # 将本地dev分支与远程dev分支之间建立链接
git branch --set-upstream master origin/next # 手动建立追踪关系
分支切换
切换分支:
代码语言:javascript复制git checkout test # 切换到test分支
git checkout -b test # 新建 切换到test分支
git checkout -b test dev # 基于dev新建test分支,并切换
远端操作
代码语言:javascript复制git fetch <远程主机名> <分支名> # fetch取回所有分支(branch)的更新
git fetch origin remotebranch[:localbranch] # 从远端拉去分支[到本地指定分支]
git merge origin/branch # 合并远端上指定分支
git pull origin remotebranch:localbranch # 拉去远端分支到本地分支
git push origin branch # 将当前分支,推送到远端上指定分支
git push origin localbranch:remotebranch # 推送本地指定分支,到远端上指定分支
git push origin :remotebranch # 删除远端指定分支
git checkout -b [--track] test origin/dev # 基于远端dev分支,新建本地test分支[同时设置跟踪]
Submodule
克隆项目同时克隆Submodule
代码语言:javascript复制git clone https://github.com/jaywcjlove/handbook.git --depth=1 --recurse-submodules
克隆项目后手动克隆子模块
代码语言:javascript复制git submodule add --force '仓库地址' '路径'
# 其中,仓库地址是指子模块仓库地址,路径指将子模块放置在当前工程下的路径。
# 注意:路径不能以 / 结尾(会造成修改不生效)、不能是现有工程已有的目录(不能順利 Clone)
- 初始化子模块:
git submodule init # 初始化submodule
- 更新子模块:
git submodule update # 更新submodule(必须在根目录执行命令)
- 下载带有submodule的工程:
git submodule update --init --recursive # 下载的工程带有submodule
- 子模块含有其他子模块时一次更新:
git submodule foreach git pull # submodule 里有其他的 submodule 一次更新
- 子模块更新:
git submodule foreach git pull origin master # submodule更新
- 给所有子模块初始化并更新:
git submodule foreach --recursive git submodule init
git submodule foreach --recursive git submodule update
删除文件
代码语言:javascript复制git rm -rf node_modules/
Remote
Git是一个分布式代码管理工具,因此可以支持多个仓库。在Git中,服务器上的仓库在本地被称为远程(Remote)。个人开发时,可能用到多个远程仓库。
- 添加远程仓库:
git remote add origin1 git@github.com:yanhaijing/data.js.git
- 显示全部远程仓库:
git remote # 显示全部源
- 显示全部远程仓库(包含详细信息):
git remote -v # 显示全部源 详细信息
- 重命名远程仓库:
git remote rename origin1 origin2 # 重命名
- 删除远程仓库:
git remote rm origin # 删除
- 查看指定远程仓库的全部信息:
git remote show origin # 查看指定源的全部信息
标签(Tag)
在开发到一定阶段时,给代码打标签是非常有用的。
- 新建带注释的标签:
git tag -a v0.1 -m 'my version 1.4' # 新建带注释标签
- 一次性推送所有标签:
git push origin --tags # 一次性推送所有分支
- 推送单个标签到origin源:
git push origin v1.5 # 推送单个tag到orgin源上
- 验证标签,验证已经签署的标签:
git tag -v v1.4.2.1 # 验证标签,验证已经签署的标签
- 查看现有标签:
git tag # 列出现有标签
- 新建标签:
git tag v0gi.1 # 新建标签
- 切换到标签:
git checkout tagname # 切换到标签
- 删除标签:
git tag -d v0.1 # 删除标签
- 删除远程标签:
git push origin :refs/tags/v0.1 # 删除远程标签
- 获取远程所有内容(包括标签):
git pull --all # 获取远程所有内容包括tag
- 查看本地版本信息:
git --git-dir='<绝对地址>/.git' describe --tags HEAD # 查看本地版本信息
日志(Log)
- 显示单行提交日志:
git config format.pretty oneline #显示历史记录时,每个提交的信息只显示一行
- 彩色的Git输出:
git config color.ui true #彩色的 git 输出
- 查看最近的提交日志:
git log #查看最近的提交日志
- 单行显示提交日志:
git log --pretty=oneline #单行显示提交日志
- 使用图形展示提交日志:
git log --graph --pretty=oneline --abbrev-commit
- 显示第几条日志(倒数):
git log -num #显示第几条log(倒数)
- 查看所有分支的所有操作记录:
git reflog #查看所有分支的所有操作记录
- 显示一天内的提交日志;可以使用各种时间格式,例如特定日期(“2008-01-15”)或多久以前(“2 years 1 day 3 minutes ago”):
git log --since=1.day #一天内的提交;你可以给出各种时间格式,比如说具体的某一天(“2008-01-15”),或者是多久以前(“2 years 1 day 3 minutes ago”)。
- 查看自己的提交日志:
git log --pretty="%h - %s" --author=自己的名字 #查看自己的日志
- 展开两次更新,显示每次提交的内容差异:
git log -p -2 #展开两次更新显示每次提交的内容差异
- 快速浏览其他协作者提交的更新:
git log --stat #要快速浏览其他协作者提交的更新都作了哪些改动
- 定制显示记录格式:
git log --pretty=format:"%h - %an, %ar : %s"#定制要显示的记录格式
- 拓扑顺序展示提交日志:
git log --pretty=format:'%h : %s' --date-order --graph # 拓扑顺序展示
- 显示日期(YYYY-MM-DD):
git log --pretty=format:'%h : %s - �' --date=short #日期YYYY-MM-DD显示
- 只显示commit:
git log <last tag> HEAD --pretty=format:%s # 只显示commit
- 写入全局配置,设置日期格式为YYYY-MM-DD:
git config --global format.pretty '%h : %s - �' --date=short #日期YYYY-MM-DD显示 写入全局配置
选项 | 说明 |
---|---|
%H | 提交对象(commit)的完整哈希字串 |
%h | 提交对象的简短哈希字串 |
%T | 树对象(tree)的完整哈希字串 |
%t | 树对象的简短哈希字串 |
%P | 父对象(parent)的完整哈希字串 |
%p | 父对象的简短哈希字串 |
%an | 作者(author)的名字 |
� | 作者的电子邮件地址 |
� | 作者修订日期(可以用 -date= 选项定制格式) |
%ar | 作者修订日期,按多久以前的方式显示 |
%cn | 提交者(committer)的名字 |
� | 提交者的电子邮件地址 |
� | 提交日期 |
%cr | 提交日期,按多久以前的方式显示 |
%s | 提交说明 |
以上表格列出了在Git中可用的Pretty Formats选项及其说明。您可以根据需要选择相应的选项来自定义log输出格式,例如展示作者、提交日期和提交说明等信息。