git 高级命令

201 阅读4分钟

文章主要解释说明git相关的高级功能,包含打标签、远程仓库管理、提交日志管理和使用、打补丁、打包等。这些命令提高我们日常工作中的打包、上传、快速应用补丁包。

1. 打标签

git tag versionNum # 打上版本号(轻标签, 不含有注释备注等信息的标签)
git tag -a versionNum -m '描述信息' # 创建带有备注的标签
git tag -a versionNum(labelName) commitId # 给指定的 commitId 打标签

git tag -d versionNum # 删除标签
git push origin --delete tag <tagname> # 删除远程分支的tag

git tag # 查看当前分支下的标签
git tag -l 'v0.1.*' # 搜索符合模式的标签 -l(list)
git tag -n # 查看标签和标签说明

git push --tags # 上传当前分支下的所有标签
git push origin tagName # 上传 tag 标签
git push branchName tagsName # 将 tagsName 推送到 branchName 分支
git diff tag1 tag2 -- filename # 比较两文件的差异

git checkout -b branchName tagName # 以 tag_name 创建一个分支 branch_name
git push origin :refs/tags/tagName # 删除远程分支 tag 

2. 远程仓库

# 克隆
git clone <url> # 克隆仓库代码
git clone <url> <dir> # 将代码 clone 到 dir 目录, 不在使用默认目录
git clone -b <branch> --single--branch <url> # 克隆单一分支代码
git clone -b <branch> <url> 

# 查看
git remote # 查看所有的主机名
git remote -v # 查看所有的远程仓库地址( name + url )
git remote show <remote> # 查看指定远程版本库信息

# 添加
git remote add <remote> <url> # 添加远程版本库(添加一个远程的仓库,在指定的 url 上) 

# 修改
git remote set-url <remote> <newUrl> # 修改主机地址

# 删除远程仓库 
git remote rm <remote>

# 删除远程分支
git push origin :branch # 删除远程分支(本地镜像)
git push --delete origin branch # 删除远程分支

# 上传
git push origin <本地分支>:<远程分支> # 上传代码到远程仓库, 如果是本地名,则删除远程分支
     -f # 强制上传
git push --set-upstream origin branchName # 新建 branchName 远程分支,当前分支与远程分支关联
					-u origin branchName # --set-upstream 简写

# 下载
git fetch <origin> # 拉代码, 需要手动合并代码
git pull <origin> <remote/branch>:<branch>

git fetch --all # 远程分支与本地分支同步
git pull --all # 拉取所有代码

git remote prune origin # 同步远程分支到本地

⚠️ 注意,删除远程分支后本地分支还存在,这个存在的分支是本地镜像分支,需要手动删除本地镜像,使用git push origin :branch

3. 操作记录

git reflog # 查看所有的本地操作记录
git log --graph --oneline --decorate  $( git fsck --no-reflog | awk '/dangling commit/ {print $3}' ) # 调出 全部记录的树

git reflog show <branch> # 列出指定分支的版本记录列表
git reflog show --date=iso <branch> # 查看分支创建的时间

git show <commitId> # 查看 commitId 信息
git show --stat <commitId># 查看 commitId 修改文件信息

4. 打包

git archive --format=zip -o master.zip master # 用 zip 方式打包, master分支代码 -o=output
            --format=zip -o v1.2.zip v1.2 # 打包 v1.2 版本
            --format=zip -o update.zip HEAD $(git diff --name--only HEAD^) # 打包更新的内容文件
            --format=zip -o update.zip HEAD $(git diff --name-only HEAD~2) # 打包最后两个版本修改的文件
            --format=zip -o update.zip HEAD $(git diff --name only master fix-error) # 打包两个分支差异的文件

5. 打补丁包

打补丁包,生成补丁包文件。然后通过应用补丁包解决功能 bug。在实际工作中,为了快速的解决某一功能问题,使用补丁包的方式提供给客户无疑是不错的选择。

# 单文件补丁包
# 生成 .patch 补丁包文件
git diff > feat.patch # 生成 feat.patch 文件 
git diff preCommitId nextCommitId > feat.patch # 两个 commit 之间差异补丁包

# 打补丁(应用补丁)
git apply --check feat.patch # 检查 patch 文件是否可用(可用则无输出、否则输出错误)
git apply feat.patch # 应用补丁包

git format-patch master # 生成 master 分支的补丁

6. 工作区 worktree

git-scm.com/docs/git-wo… 用于解决不同分支之间差异较大,需要单独管理,如分支之间依赖的版本库不同,切换分支就需要从新安装依赖,挺麻烦的,这时就需要使用工作目录 git-worktree 来解决这个问题。

# 查看
git worktree list # 查看工作区
git worktree list --porcelain # 查看更详细的工作区

# 添加
git worktree add <path> # 添加工作区默认分支名为 path 最后的路径名称
git worktree add ../path master # 创建新的工作的 master 分支
git worktree add ../path master -b fix # 创建基于 master 分支的新分支 fix 的工作目录 path

# 清理工作目录
git worktree prune # 清理工作目录,人为删除后查看工作树后面会出现 prunable 字样。

# 删除工作目录
git worktree remove ../path # 移除树分支
git worktree remove -f ../path # 强制移除树分支

# 锁定/解锁工作目录
git worktree lock ../path # 锁定
git worktree unlock ../path # 解锁

# 移动工作树到新的目录中
git worktree move <worktree> <new-path>

# 修复工作树
git worktree repair [<path>...] # 如果新工作树中无法正常指向原仓库,可试着在原仓库中执行该命令修复它

7. 其他

git checkout <branch> -- filename : # 将 dev 分支的 filename 检出到当前分支
git command --help # 查看命令 详情, command 命令