Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

git命令收集 #2

Open
baixiaoji opened this issue Sep 22, 2018 · 2 comments
Open

git命令收集 #2

baixiaoji opened this issue Sep 22, 2018 · 2 comments
Labels

Comments

@baixiaoji
Copy link
Owner

前言

现在有了很多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
@baixiaoji
Copy link
Owner Author

批量删除本地分支

git branch | grep 'XXX*' | xargs git branch -d

@baixiaoji
Copy link
Owner Author

baixiaoji commented May 19, 2024

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 可以同时出现,表示本地分支和追踪的远程分支都有一些独有的提交。在这种情况下,你可能需要先拉取远程分支的新提交,然后再推送你的本地提交。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant