• 【Git】540- 高频使用的 Git 命令


    作者:CRPER

    juejin.im/post/5de8d849e51d455808332166

    前言

    汇总下我在项目中高频使用的git命令及姿势。

    不是入门文档,官方文档肯定比我全面,这里是结合实际业务场景输出。

    使用的 Git版本:git version 2.24.0

    命令

    git log

    # 输出概要日志,这条命令等同于
    # git log --pretty=oneline --abbrev-commit
    git log --oneline
    
    # 指定最近几个提交可以带上 - + 数字
    git log --oneline -5
    
    # 提供类似 GUI 工具的 log 展示
    git log --graph --date=relative --pretty=tformat:'%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%an %ad)%Creset'

    查看日志,常规操作,必备

    git status

    查看工作区状态的东东,不如GUI直观,但是命令行也有一些用的

    git status
    git status -s
    git status --show-stash
    git checkout

    用来切换到对应记录的,可以基于分支,提交,标签。

    切提交和标签一般用来热修复或者老版本需要加新特性。

    git checkout dev
    
    git checkout origin/test
    
    git checkout --track origin/feature-test
    
    git checkout -b testbranch
    
    git checkout -- file
    
    git checkout .
    
    git checkout -

    git commit

    天天打交道的命令,这里说一些很常见的姿势

    git commit --amend --no-edit
    
    git commit --no-verify -m "xxx"
    
    git commit -m "xxx"
    
    git commit -t templateFile
    
    git commit -F

    git reset

    不得不说,代码回滚中这个命令也是用的很多,而且是 --hard

    git reset --hard commit_sha1
    git reset --soft commit_sha1
    git reset --soft HEAD~1
    git reset --mixed commit_sha1
    git reset --merge commit_sha1
    git reset --keep commit_sha1

    git revert

    一般用于master 的代码回滚,因为多人在上面协作,

    revert 可以平稳的回滚代码,但却保留提交记录,不会让协作的人各种冲突

    git revert commit-sha1

    git rebase

    变基在项目中算是很频繁的,为什么这么说。

    比如你开发一个新的 feature, 遵循最小化代码提交的理念。

    在整个功能开发完毕的时侯,会有非常多的 commit,用 rebase 可以让我们的commit记录很干净

    git rebase -i git-sha1|branch(HEAD)
    git rebase --continue
    git rebase --skip
    git rebase --abort
    • pick: 是保留该 commit(采用)

    • edit: 一般你提交的东西多了,可以用这个把东东拿回工作区拆分更细的 commit

    • reword: 这个可以重新修改你的 commit msg

    • squash: 内容保留,把提交信息往上一个 commit 合并进去

    • fixup: 保留变动内容,但是抛弃 commit msg

    • drop: 用的比较少,无用的改动你会提交么!!!

    突然发现截图还有几个新的行为,估计是新版本带来的,

    从字面上就可以看出来大体的意思, 就是把回滚和打标签这些放到变基中简化操作。

    温馨提示:

    • 本地提交之前,最好把基准点变为需要合并的分支,这样提交 PR/MR 的时侯就不会冲突(本地来解决冲突)

    • 不要在公共分支上变基!!!一变其他协作者基本都一堆冲突!除非你们有很清晰的分支管理机制

    git merge

    
    
    git merge --no-ff branchName
    

    git pull

    git pull中用的最多是带--rebase(-r)的方式(变基形式拉取合并代码),保持分支一条线。

    默认的pull会走ff模式,多数情况会产生新的commit,部分参数与 merge提供一致。

    git push

    当本地分支存在,远程分支不存在的时侯,可以这样推送关联的远程分支

    git push origin localbranch
    git push -d origin branchName
    git push --tags
    git push --follow-tags
    git push -f origin branchName
    git push --force-with-lease

    git remote

    这个东西用在你需要考虑维护多个地方仓库的时侯会考虑,或者修改仓库源的时侯

    git remote add origin url
    git remote add github url
    git remote set-url  origin(或者其他上游域) url

    git branch

    该命令用的最多的就是删除本地分支,重命名分支,删除远程分支了

    git branch -d branchName
    git branch -M oldBranch newNameBranch
    git branch --set-upstream-to=origin/xxx
    git branch --set-upstream-to origin xxx

    git stash

    暂存用的最多时侯就是你撸代码撸到一半,突然说有个紧急 BUG 要修正。

    或者别人在你这里需要帮忙排查代码,你这时候也会用到。

    强烈建议给每个 stash 添加描述信息!!!

    git stash save stashName
    git stash -u save stashName
    git stash push -m "更改了 xx"
    git stash apply stash@{0}
    git stash pop stash@{0}
    git stash list
    git stash clear 
    git stash drop stash@{0}
    git stash show stash@{0}

    git reflog

    这个命令的强大之处,是记录了所有行为,包括你 rebase,merge, reset 这些

    当我们不小心硬回滚的时侯,或变基错了都可以在这里找到行为之前的commit,然后回滚。

    当然这个时间回溯也只在本地有用,你推送到远程分支的破坏性改动,该凉还是得凉。

    git reflog -5

    git cherry-pick

    这个东西你可以理解为你去买橘子,你会专门挑一些符合心意的橘子放到购物篮中。

    你可以从多个分支同时挑取部分需要的 commit 合并到同一个地方去,是不是贼骚。

    这货和变基有点类似,但是仅仅类似,挑过来的 commit 若是没有冲突则追加。

    有冲突会中断,解决后 --continue

    git cherry-pick commit-sha1
    git cherry-pick master~4 master~2
    git cherry-pick startGitSha1..endGitSha1

    git rm

    这个命令在旧的版本用的比较最多的姿势是为了重新索引.gitignore 的范围

    git rm --cache -- file
    git rm -r --cached .
    git add .
    git commit -m "xxx"

    git rev-parse

    这个估计一般人用的不是很多,可以通过这个快速获取部分git 仓库的信息

    我在弄脚本的时侯就会从这里拿东西

    git rev-parse --short HEAD --verify
    git rev-parse --show-toplevel
    git rev-parse --git-dir
    git rev-parse --all

    git diff

    对于这个命令,在终端比对用的不是很频繁,除了少量改动的时侯可能会用这个看看。

    其他情况下我更倾向于用 GUI 工具来看,因为比对更加直观。

    总结

    git 的常用命令其实很好掌握,很多命令都有 Linux 的影子。

    列出来的命令都是高频使用的,或许有一些更骚的姿势没有摸索到,

    有更好建议的,或者发现不对之处的请留言,会及时修正,谢谢阅读。

    ▼原创系列推荐▼1. JavaScript 重温系列(22篇全)
    2. ECMAScript 重温系列(10篇全)
    3. JavaScript设计模式 重温系列(9篇全)4. 正则 / 框架 / 算法等 重温系列(16篇全)5. Webpack4 入门(上)|| Webpack4 入门(下)6. MobX 入门(上) ||  MobX 入门(下)7. 59篇原创系列汇总回复“加群”与大佬们一起交流学习~点这,与大家一起分享本文吧~
    
    个人博客:http://www.pingan8787.com 微信公众号【前端自习课】和千万网友一起,每日清晨,享受一篇前端优秀文章。 目前已连续推送文章 600+ 天,愿每个人的初心都能一直坚持下去!
  • 相关阅读:
    七月二十二日学习报告
    七月二十一学习报告
    七月二十学习报告
    补 七月十九学习报告
    七月十八学习报告
    iOS 逆向工程(三)之Xcode检测是否越狱成功
    iOS 逆向工程(二)之越狱手机安装必备软件
    iOS逆向工程(一)之手机越狱
    html练习 简单html页面
    集合对象序列化 反序列 IO 1将文件中的所有信息,通过合适的IO流读取出来,封装成Person对象,使用集合进行存储 2将集合对象序列化到另外一个文件persons.txt中 3从persons.txt反序列化其中的集合,并遍历集合内容
  • 原文地址:https://www.cnblogs.com/pingan8787/p/13069447.html
Copyright © 2020-2023  润新知