baixiaoji/blog

git命令收集

Opened this issue · 2 comments

前言

现在有了很多GUI界面代替我们使用终端,这是一件好事情,减少我们对一些比较复杂命令的记录。
但是有时候会比较好奇,这些图形操作的底层代表对应的那些操作,所以根据 git 官网收录了部分命令。

实用

  1. 从别的分支拉取文件合并到当前分支

    场景一:多人不同分支同时开发,你需要他已经开发完成的组件或utils库

    场景二:多个需求(A、B), B需要A中的功能组件,但A尚未上线

    git checkout <branch_name> -- <paths>
  2. 建立某个提交为分支起点的分支

    场景一:遇见一个有趣的问题需要保留对应的现场,等有空研究

    git branch <branch_name>  <commit_message>
  3. 删除远程分支

    场景一:一不小心将自己之后feature上传的远程仓库,想要删除

    # 不知道是不是所有的公司都对master做了保护
    git push <remote_name> —delete <branch_name>
  4. 将自己部分修改藏起来

    场景一:突然遇见一些修复线上需求的问题,将自己部分的修改先藏起来

    # 藏起来
    git stash / git stash save
    # 查看stash的列表
    git stash list
    # 取出对应的stash
    # 有index参数的是回到你原来放进去的状态
    git stash apply / git stash apply —index
    # 删除stash列表中对应的stash
    git stash drop stash@{n}

有趣

log 相关

# 显示之前端操作记录以及统计在那些文件进行修改,包括修改的行数等信息
git log  --stat
# 调整 log 的输出方式
# Option oneline | full | fuller |short | format
git log --pretty=[option]
# Format-一些参数
# 可以展示时间段的所有的提交信息
git log  --since=2.days / 1.weeks 
git log  --until=2017.12.31
# 展示缩写的SHA-1的commit
git log --abbrev-commit --oneline
# 展示某一个快照的操作记录
git show <SHA-1>
# 查看远程master与本地feature2上差几个分支
git log  origin/master..feature2
# 看到只有一方拥有的commit
git log origin/master...feature2
# 这时候就要分不清哪个commit是哪条分支上的了
git log --left-right origin/master…feature2

Branch 相关

# 查看本地每一条分支最后一次的提交
git branch -v
# 查看每一条分支最后的提交以及对应的上流分支
git branch -vv
# 查看那些分支合并过
git branch --merge
# 查看那些分支没有合并过
git branch --no-merged

remote 相关

# 查看远程仓库的所有信息
git remote show <remote-name>

Tag 相关

# 查看标签(附注标签和轻量标签)
git tag
# 创建轻量标签
git tag <tag_version>
# 创建附注标签
# 创建附注标签的-m的信息是必须添加的,如果没有手动添加是不容许的
git tag -a <tag_version>  -m <explain_message>
# 上传标签到远程
git push origin <tag_version>
# 远程那边打tag
git push origin --tags

Submodule 相关

# 添加一个子模块
git add submodule URL
# 克隆一个包含子模块的项目,正常克隆下来,子模块是空目录
git submodule init  && git submodule update
# 克隆同时拉下子模块代码
git clone recursive url
# 更新子模块的,自动合并到本地
git submodule update --remote

个人配置

# 统一 git commit的格式
# 创建一个template 文件.gitmessage.txt 将commit的模板指定该文件
git config --global commit.template ~/.gitmessage.txt
# 不想在每一个仓库都创建ignore文件,那就做一次创建一个.gitignore_global文件
git config —global core.excludesfile ~/.gitignore_global

批量删除本地分支

git branch | grep 'XXX*' | xargs git branch -d
git branch -vv | awk '/: gone]/{print $1}' | xargs git branch -d

这个命令的目的是删除所有已经被追踪的远程分支已经删除,但本地仍然存在的分支。

下面是这个命令的详细解释:

  • git branch -vv:这个命令列出所有的本地分支,并显示每个分支的最后一次提交。-vv 选项还会显示每个分支追踪的远程分支和它们的状态。

  • awk '/: gone]/{print $1}':这是一个 awk 命令,它搜索包含 : gone] 的行,并打印这些行的第一个字段(即分支名)。在 git branch -vv 的输出中,: gone] 表示追踪的远程分支已经被删除。

  • xargs git branch -d:这是一个 xargs 命令,它将前面命令的输出(即所有已经被追踪的远程分支已经删除的本地分支名)作为参数传递给 git branch -d 命令。git branch -d 命令用于删除分支。

总的来说,这个命令的作用是找出所有已经被追踪的远程分支已经删除,但本地仍然存在的分支,并删除它们。这对于清理不再需要的本地分支非常有用。


git branch -vv 命令会列出所有的本地分支,并显示每个分支的最后一次提交和追踪的远程分支的信息。

以下是 git branch -vv 命令的典型输出的一个例子:

* master 1a2b3c4 [origin/master: ahead 1, behind 2] last commit message
  feature 9f8g7h6 [origin/feature] another commit message

这个输出中的每一行代表一个分支,每一行的内容包括以下部分:

  • * 或空格:一个 * 表示这是当前的活动分支。空格表示这不是当前的活动分支。

  • 分支名:这是分支的名称,例如 masterfeature

  • 最后一次提交的哈希值:这是分支上最后一次提交的哈希值,例如 1a2b3c49f8g7h6

  • 追踪的远程分支的信息:这是分支追踪的远程分支的信息,格式为 [<remote>/<branch>: <status>]<remote>/<branch> 是追踪的远程分支的名称,例如 origin/masterorigin/feature<status> 是本地分支相对于追踪的远程分支的状态,例如 ahead 1, behind 2 表示本地分支比追踪的远程分支领先 1 个提交,落后 2 个提交。

  • 最后一次提交的信息:这是分支上最后一次提交的信息,通常是提交的消息。

总的来说,git branch -vv 命令提供了一个快速查看所有分支状态的方式,包括每个分支的最后一次提交和追踪的远程分支的状态。

git branch -vv 命令的输出中,追踪信息的 <status> 部分描述了本地分支相对于其追踪的远程分支的状态。以下是可能的 <status> 值:

  • ahead X:本地分支比追踪的远程分支领先 X 个提交。这意味着你在本地做了一些提交,但还没有推送到远程分支。

  • behind Y:本地分支比追踪的远程分支落后 Y 个提交。这意味着远程分支有一些新的提交,你还没有拉取到本地。

  • gone:追踪的远程分支已经被删除。

  • 如果本地分支和追踪的远程分支完全同步,那么 <status> 部分将不会显示。

请注意,ahead Xbehind Y 可以同时出现,表示本地分支和追踪的远程分支都有一些独有的提交。在这种情况下,你可能需要先拉取远程分支的新提交,然后再推送你的本地提交。