知行编程网知行编程网  2022-06-01 13:00 知行编程网 隐藏边栏 |   抢沙发  6 
文章评分 0 次,平均分 0.0

这份Git 高级用法小抄,掌握起来!

作者 | Maxence Poutord   来自 | New Frontend

编辑 | 深度学习这件小事


如果你觉得 git 很迷惑人,那么这份小抄正是为你准备的!请注意我有意跳过了 git commit、git pull/push 之类的基本命令,这份小抄的主题是 git 的一些「高级」用法。

这份Git 高级用法小抄,掌握起来!


   导航 —— 跳到之前的分支


<span style="color: navy;">git</span> checkout -

   查看历史


<span style="color: rgb(153, 153, 136);font-style: italic;"># 每个提交在一行内显示</span><br />git <span style="color: rgb(0, 134, 179);">log</span> <span style="color: rgb(153, 153, 136);font-style: italic;">--oneline</span></p> <p><span style="color: rgb(153, 153, 136);font-style: italic;"># 在所有提交日志中搜索包含「homepage」的提交</span><br />git <span style="color: rgb(0, 134, 179);">log</span> <span style="color: rgb(153, 153, 136);font-style: italic;">--all --grep= homepage</span></p> <p><span style="color: rgb(153, 153, 136);font-style: italic;"># 获取某人的提交日志</span><br />git <span style="color: rgb(0, 134, 179);">log</span> <span style="color: rgb(153, 153, 136);font-style: italic;">--author="Maxence"</span>

   哎呀:之前重置了一个不想保留的提交,但是现在又想要回滚?


<span style="color: rgb(153, 153, 136);font-style: italic;"># 获取所有操作历史</span><br />git reflog</p> <p><span style="color: rgb(153, 153, 136);font-style: italic;"># 重置到相应提交</span><br />git <span style="font-weight: 700;">reset</span> HEAD@{4}<br /><span style="color: rgb(153, 153, 136);font-style: italic;"># ……或者……</span><br />git <span style="font-weight: 700;">reset</span> --hard <提交的哈希值>

   哎哟:我把本地仓库搞得一团糟,应该怎么清理?


git fetch origin<br />git checkout <span style="font-weight: 700;">master</span><br /><span style="color: rgb(153, 0, 0);font-weight: 700;">git</span> reset --hard origin/<span style="color: teal;">master</span>

   查看我的分支和 master 的不同


git diff master..<span style="font-weight: 700;">my</span>-branch

   定制提交


<span style="color: rgb(153, 153, 153);font-weight: 700;"># 编辑上次提交</span><br />git commit --amend -m <span style="color: rgb(221, 17, 68);">"更好的提交日志"</span></p> <p><span style="color: rgb(153, 153, 153);font-weight: 700;"># 在上次提交中附加一些内容,保持提交日志不变git add . && git commit --amend --no-edit</span></p> <p><span style="color: rgb(153, 153, 153);font-weight: 700;"># 空提交 —— 可以用来重新触发 CI 构建</span><br />git commit --allow-empty -m <span style="color: rgb(221, 17, 68);">"chore: re-trigger build"</span>

   squash 提交

比方说我想要 rebase 最近 3 个提交:
- git rebase -i HEAD~3
- 保留第一行的 pick,剩余提交替换为 squash 或 s
- 清理提交日志并保存(vi 编辑器中键入 :wq 即可保存)
pick <span style="color: teal;">64</span>d26a1 fea<span style="color: teal;">t:</span> <span style="color: rgb(0, 134, 179);">add</span> <span style="color: rgb(0, 134, 179);">index</span>.js<br />s <span style="color: teal;">45</span>f0259 <span style="font-weight: 700;">fix</span>: <span style="font-weight: 700;">update</span> <span style="color: rgb(0, 134, 179);">index</span>.js<br />s <span style="color: teal;">8</span>b15b0a <span style="font-weight: 700;">fix</span>: typo in <span style="color: rgb(0, 134, 179);">index</span>.js

   修正

比方说想在提交 fed14a4c 加上一些内容。


这份Git 高级用法小抄,掌握起来!


   git 提交分支

git add .<br />git <span style="font-weight: 700;">commit</span> <span style="color: rgb(153, 153, 136);font-style: italic;">--fixup HEAD~1</span><br /># 或者也可以用提交的哈希值(fed14a4c)替换 <span style="font-weight: 700;">HEAD</span>~<span style="color: teal;">1</span></p> <p>git rebase -i <span style="font-weight: 700;">HEAD</span>~<span style="color: teal;">3</span> <span style="color: rgb(153, 153, 136);font-style: italic;">--autosquash</span><br /># 保存并退出文件(VI 中输入 <span style="color: rgb(221, 17, 68);">`:wq`</span>)

   rebase 的时候在每个提交上执行命令

如果特性很多,一个分支里可能有多个提交。如果测试失败了,你希望能找到导致测试失败的提交。这时候你可以使用 rebase --exec 命令在每个提交上执行命令。
# 在最近 <span style="color: teal;">3</span> 个提交上运行 `npm test` 命令<br />git rebase HEAD~<span style="color: teal;">3</span> --exec <span style="color: rgb(221, 17, 68);">"npm test"</span>
 


这份Git 高级用法小抄,掌握起来!


   暂存

暂存不止是 git stash 和 git stash pop ;)
<span style="color: rgb(153, 153, 136);font-style: italic;"># 保存所有正在追踪的文件</span><br />git stash save <span style="color: rgb(221, 17, 68);">"日志信息"</span></p> <p><span style="color: rgb(153, 153, 136);font-style: italic;"># 列出所有的暂存项</span><br />git stash list</p> <p><span style="color: rgb(153, 153, 136);font-style: italic;"># 获取并删除暂存项</span><br />git stash apply stash@{1}<br />git stash drop stash@{1}<br /><span style="color: rgb(153, 153, 136);font-style: italic;"># ……或使用一条命令……</span><br />git stash <span style="font-weight: 700;">pop</span> stash@{1}

   清理

# 移除远程仓库上不存在的分支<br />git fetch -p</p> <p># 移除所有包含 `greenkeeper` 的分支<br />git fetch -p && git branch --remote | fgrep greenkeeper | sed <span style="color: rgb(221, 17, 68);"> s/^.{9}// </span> | xargs git push origin --delete

   GitHub = Git + Hub

我把 Hub 当成 git 的一个封装来用。你如果也想这么做,可以设置一个别名:<span style="font-size: 16px;">alias git= hub</span>
<span style="color: rgb(153, 153, 153);font-weight: 700;"># 打开浏览器访问仓库 url(仅限 GitHub 仓库)git browse</span>

   额外福利:我最喜爱的 git 别名

<span style="color: rgb(0, 134, 179);">alias</span> g=<span style="color: rgb(221, 17, 68);"> git</span><br /><span style="color: rgb(0, 134, 179);">alias</span> glog=<span style="color: rgb(221, 17, 68);"> git log --oneline --decorate --graph</span><br /><span style="color: rgb(0, 134, 179);">alias</span> gst=<span style="color: rgb(221, 17, 68);"> git status</span><br /><span style="color: rgb(0, 134, 179);">alias</span> gp=<span style="color: rgb(221, 17, 68);"> git push</span><br /><span style="color: rgb(0, 134, 179);">alias</span> ga=<span style="color: rgb(221, 17, 68);"> git add </span><span style="color: rgb(0, 134, 179);">alias</span> gc=<span style="color: rgb(221, 17, 68);"> git commit -v</span></p> <p><span style="color: rgb(153, 153, 136);font-style: italic;"># 🤘</span><br /><span style="color: rgb(0, 134, 179);">alias</span> yolo=<span style="color: rgb(221, 17, 68);"> git push --force</span></p> <p><span style="color: rgb(153, 153, 136);font-style: italic;"># 每周站会汇报工作时用</span><br />git-<span style="color: rgb(153, 0, 0);font-weight: 700;">standup</span>() {<br />AUTHOR=<span style="color: teal;">${AUTHOR:="`git config user.name`"}</span></p> <p>since=yesterday<br /><span style="font-weight: 700;">if</span> [[ $(date +%u) == 1 ]] ; <span style="font-weight: 700;">then</span><br />since=<span style="color: rgb(221, 17, 68);">"2 days ago"</span><br /><span style="font-weight: 700;">fi</span></p> <p>git <span style="color: rgb(0, 134, 179);">log</span> --all --since <span style="color: rgb(221, 17, 68);">"<span style="color: teal;">$since</span>"</span> --oneline --author=<span style="color: rgb(221, 17, 68);">"<span style="color: teal;">$AUTHOR</span>"</span>
<pre style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><pre style="font-size: 16px;letter-spacing: 0.544px;text-align: center;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p style="max-width: 100%;letter-spacing: 0.544px;white-space: normal;color: rgb(0, 0, 0);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;widows: 1;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;font-size: 14px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;font-size: 16px;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;box-sizing: border-box !important;overflow-wrap: break-word !important;">—</span></strong>完<strong style="max-width: 100%;font-size: 16px;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;font-size: 14px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;font-size: 16px;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;box-sizing: border-box !important;overflow-wrap: break-word !important;">—</span></strong></span></strong></span></strong></p><section style="max-width: 100%;letter-spacing: 0.544px;white-space: normal;font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;widows: 1;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="margin-top: 15px;margin-bottom: 25px;max-width: 100%;opacity: 0.8;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="margin-top: 15px;margin-bottom: 25px;max-width: 100%;opacity: 0.8;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section><p style="margin-bottom: 15px;padding-right: 0em;padding-left: 0em;max-width: 100%;color: rgb(127, 127, 127);font-size: 12px;font-family: sans-serif;line-height: 25.5938px;letter-spacing: 3px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;color: rgb(0, 0, 0);box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 16px;font-family: 微软雅黑;caret-color: red;box-sizing: border-box !important;overflow-wrap: break-word !important;">为您推荐</span></strong></span></p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;box-sizing: border-box !important;overflow-wrap: break-word !important;">有你的学校吗?2020软科中国大学排名发布!</p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="font-size: 14px;">GitHub重大更新:在线开发上线,是时候卸载IDE了</span></p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;box-sizing: border-box !important;overflow-wrap: break-word !important;">李沐团队半年离开六人,MxNet是否英雄落幕?<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"  /></p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="color: rgb(87, 107, 149);-webkit-tap-highlight-color: rgba(0, 0, 0, 0);cursor: pointer;max-width: 100%;font-size: 14px;box-sizing: border-box !important;overflow-wrap: break-word !important;">史上最烂的项目:苦撑12年,600多万行代码...</span></p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;box-sizing: border-box !important;overflow-wrap: break-word !important;">一文概览2D人体姿态估计</p></section></section></section></section></section></section></section></section>
这份Git 高级用法小抄,掌握起来!

本篇文章来源于: 深度学习这件小事

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享