git命令收集
Opened this issue · 2 comments
前言
现在有了很多GUI界面代替我们使用终端,这是一件好事情,减少我们对一些比较复杂命令的记录。
但是有时候会比较好奇,这些图形操作的底层代表对应的那些操作,所以根据 git 官网收录了部分命令。
实用
-
从别的分支拉取文件合并到当前分支
场景一:多人不同分支同时开发,你需要他已经开发完成的组件或utils库
场景二:多个需求(A、B), B需要A中的功能组件,但A尚未上线
git checkout <branch_name> -- <paths>
-
建立某个提交为分支起点的分支
场景一:遇见一个有趣的问题需要保留对应的现场,等有空研究
git branch <branch_name> <commit_message>
-
删除远程分支
场景一:一不小心将自己之后feature上传的远程仓库,想要删除
# 不知道是不是所有的公司都对master做了保护 git push <remote_name> —delete <branch_name>
-
将自己部分修改藏起来
场景一:突然遇见一些修复线上需求的问题,将自己部分的修改先藏起来
# 藏起来 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
这个输出中的每一行代表一个分支,每一行的内容包括以下部分:
-
*
或空格:一个*
表示这是当前的活动分支。空格表示这不是当前的活动分支。 -
分支名:这是分支的名称,例如
master
或feature
。 -
最后一次提交的哈希值:这是分支上最后一次提交的哈希值,例如
1a2b3c4
或9f8g7h6
。 -
追踪的远程分支的信息:这是分支追踪的远程分支的信息,格式为
[<remote>/<branch>: <status>]
。<remote>/<branch>
是追踪的远程分支的名称,例如origin/master
或origin/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 X
和 behind Y
可以同时出现,表示本地分支和追踪的远程分支都有一些独有的提交。在这种情况下,你可能需要先拉取远程分支的新提交,然后再推送你的本地提交。