前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一些实用装X的Git命令

一些实用装X的Git命令

作者头像
IMWeb前端团队
发布2018-01-08 17:19:39
7150
发布2018-01-08 17:19:39
举报
文章被收录于专栏:IMWeb前端团队IMWeb前端团队

本文作者:IMWeb 何璇 原文出处:IMWeb社区 未经同意,禁止转载

你真的在使用Git嘛?

在日常工作中,也许你会使用类似svn、git这样的版本控制,协同开发工具。但是当项目不够大,不够复杂,或者说需求重要程度没有那么高时,我们常常只是简单地使用这类工具。

就比如我现在开发的需求,实际上就是用svn部署一个中心仓库,我直接checkout下来主干,开发提交。用git的话,实际上就是利用github或者部署的gitlab上新建远程仓库,再clone下来开发提交加push。

所以我们真的是在使用git嘛?其实在我的开发工作中,我还是需要git来为我完成一些特殊的工作的。下面我们来列举一些装X的命令吧(什么!你不会告诉我你不是用gitbash等命令行的工具吧)~

git stash

Situation: 在遇到项目具有多个独立的功能时,在本地你可能会存在几条类似feature-*命名的分支,那么当你在开发其中一条功能分支A的时候,修改了一下此功能依赖的,且tracked by另一条功能分支B的文件(实际上这是常有的事),那么为了做好版本控制你不会将这个文件的修改提交到分支A上,但是在这种情况在git中,你还未提交时git实际上是不允许你切换分支的。

commands

代码语言:javascript
复制
$ git status
    # on branch feature-1
    # changes to be committed:
    # 
    # modified: xxx.js

// 将当前修改储存
$ git stash
    # save working ...

$ git checkout feature-2
$ ...
// 查看当前储存的修改
$ git stash list
    stash@{0}: WIP on feature-1: xxx
    stash@{1}: WIP on feature-1: xxx
    stash@{2}: WIP on master: xxx

// 查看某个储存修改的具体
$ git stash show stash@{`index`}

// 将某个储存的修改应用到当前分支
$ git stash apply stash@{`index`}

// 将储存在栈顶的修改应用到当前分支
$ git stash pop

// 清除所有储存的修改
$ git stash clear

git reset / git revert

Situation

  • 产品开发过程中不可避免的总是会发生一些需求调整或者变更,这种现象的解决常常反映称舍弃某个文件的修改,那么这时候就是版本控制工具的天下了!想想以前还是将整个目录打包成压缩文件并给个label...
  • 可能对于git新手来说,并不能很好地使用版本控制,往往将一堆文件的修改一次性地提交。那么当需要回滚的文件在那次提交或者需要将发布的版本回滚时,就非常麻烦了...

commands

  1. git reset
代码语言:javascript
复制
$ git status
    # on branch master
    # changes to be committed:
    # 
    # modified: xxx.js
    # modified: xxx

// 将当前分支的状态恢复为最近的提交(HEAD),重置所有已经add的修改
$ git reset 
$ git status
    # on branch master
    # changes not staged for commit:
    # 
    # modified: xxx.js
    # modified: xxx

$ git log -4 --pretty=format:"%h %s"
    1c002dd added cat-file
    9b29157 added blame
    35cfb2b updated README formatting
    f3cc40e changed my name a bit
// 将当前分支的状态重置为从HEAD数第三个提交
// 如果加上--hard参数,那么下面的git status则为空,因为git reset会丢弃修改
// 相当于发布回滚
$ git reset HEAD~3
$ git log
    35cfb2b updated README formatting
    f3cc40e changed my name a bit
    ...
$ git status
    # on branch master
    # changes not staged for commit:
    #   ...
  1. git revert
代码语言:javascript
复制
$ git log -4 --pretty=format:"%h %s"
    1c002dd added cat-file
    9b29157 added blame
    35cfb2b updated README formatting
    f3cc40e changed my name a bit
// 恢复某个提交所做的修改,并把撤销之后的修改提交
$ git revert HEAD~`index`
$ git revert `commit`(例如9b29157)

$ git log -4 --pretty=format:"%h %s"
    d2912jn ...
    1c002dd added cat-file
    9b29157 added blame
    35cfb2b updated README formatting

git checkout

Situation:我们知道git checkout是用于切换分支的一个命令,但是我们却可以用它来干一些常用的事~比如:

  • 当我们想放弃一些还未提交的无用修改时,可以用checkout来还原文件的内容
  • 当我们需要将版本回滚到比较久远的一个状态,或者说在分支合并之前的状态时,可以用git checkout来回滚。

commands

代码语言:javascript
复制
$ git status
    # on branch master
    # changes not staged for commit:
    #   modified: index.html

// 丢弃某个文件还未提交的修改
$ git checkout index.html
$ git status
    # nothing to commit, working directory clean

$ git log -4 --pretty=format:"%h %s"
    1c002dd added cat-file
    9b29157 added blame
    35cfb2b updated README formatting
    f3cc40e changed my name a bit

// 'detached HEAD' 将当前状态切换到35cfb2b这个提交的状态
$ git checkout 35cfb2b
    # Note: checking out '35cfb2b'
    # ...
$ ... (你甚至可以做些修改并提交)

// 保留当前的状态,在一个新建的分支上
$ git checkout -b hotfix

// 强行回滚远程master到本地的hotfix分支的状态
$ git push -f origin hotfix:master

常用技巧

  1. 有时候是不是觉得每次使用https协议跟github连接时,都要输入账号密码,很烦呀。用过svn的都知道,svn是存在一个文件来存储账号密码的,那么在git中也是可以这么做的,只需要轻松的一次命令。
代码语言:javascript
复制
// 自动保存相应url对应的账号密码
git config --global credential.helper store
  1. 有时候可能你需要配置代理~,当然如果公司中有自己的gitlab的话,可以为某个具体的项目(--local,存在于.git/config)配置,覆盖全局的配置(--global,存在于~/.gitconfig)。
代码语言:javascript
复制
git config --global http.proxy http://proxy.com
git config --global https.proxy http://proxy.com
  1. 为命令配置别名,可能这个不是特别需要~但是还是可以装一下X!
代码语言:javascript
复制
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
  1. ... and so on

Reference

文中提到操作可能对于我来说还是比较经常的操作,可能有些经常使用git rebase等的命令 ,git远不止这些,一个版本控制工具的原理,或者说分支策略的最佳实践等等,还是可以了解一下的,还有不少可以挖掘!

《Pro Git》

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 你真的在使用Git嘛?
  • git stash
  • git reset / git revert
  • git checkout
  • 常用技巧
  • Reference
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档