git rebase --skip_可冒充git大神的git tips

d1e36ef8cff77eb0ec2ac4b67778c251.png

rebase

算冒充大神的必备技能了,移花接木之术,可以任意整理分支树。嫌弃分支树枝枝蔓蔓,一定要学会此招。

git rebase <branch or commit> # 将修改以指定的分支或修改重新应用一下
git rebase -i <branch or commit> # 同上,交互式,可在交互界面里对需要的commits进行修改、压缩、丢弃以及调整顺序等
git pull <remote> <branch> --rebase # 拉取远程代码时使用rebase替代merge操作,本地若有远程没有的修改,则被本地修改rebase到远程代码上。

导出纯代码和浅克隆

很多场景,我们不需要完整的代码仓库,不需要commit历史,我就要最新的或某分支某tag的纯代码而已。

## archive命令就是将纯代码打包(默认tar,可以另指定zip等)
git archive master | tar -x -C /somewhere/else # 等于将代码导出到另一个地方
git archive master | bzip2 >source-tree.tar.bz2 # 代码打包后再压缩下
git archive --format=zip --output /full/path/to/zipfile.zip master # 以zip压缩包导出

## 克隆tag/branch时使用浅克隆
git clone --branch tag-v0.1 --depth 1 git@git.home.nas:gitrepo/hellogit.git
# --depth 1 只取回一次提交记录,同时也生效--single-branch

# 将浅克隆的shallow repo转换为完整repo仓库
git fetch --unshallow origin master

submodule子仓库

对,我们git也可以将别的仓库引用为本仓库的子仓库。比如要创建一个封装类型的工程时,比如直接用git管理golang的vendor模块时,等等。

# 全新克隆时直接将子仓库也全部克隆来
git clone --recurse-submodules https://github.com/wadefelix/YourProjectName

# 若已有项目代码仓库,但其中尚未将子仓取下来时,用下面的
git submodule init
git submodule update

git代理

代码需要穿墙打洞才能取下来或者加速时。

# 设置全局使用git代理,也可以是其它端口啊(不仅限定用443)
git config --global https.proxy https://git-proxy-server:443

git代理配置其实也是在文件里的~/.gitconfig,直接编辑这个文件也可以,它的内容:

[https]
        proxy = https://git-proxy-server:443

那怎么搭建代理服务器呢?好咧,常用的nginx就可以,配置文件

    server {
        listen 80;
        listen 443;
        resolver 192.168.0.1;
        proxy_connect;
        location /{
            proxy_pass https://$http_host$request_uri;
            proxy_set_header Host $host;
        }
    }

管理登录信息

可以设置保存用户名密码的,命令

git config credential.helper store

设置完毕后,~/.gitconfig配置文件会有:

[credential]
        helper = store

保存用户名和密码后~/.git-credentials文件内容:

https://username:password@git-server

对,明文的,请斟酌。

分支删除

分支用多了,这个算是小儿科了,简列几条:

git fetch -p # 跟随远程删除分支的操作删除本地分支
git fetch -P # 跟随远程删除分支的操作删除本地tag
# 用branch和push分别删除本地分支和远程分支的操作你肯定会,对不对?
git branch --delete <branch>
git push origin --delete <branch>

git后悔药

  1. 工作区的代码想撤销: git checkout -- <file>
  2. add到暂存区的代码想撤销: git reset HEADgit unstage
  3. 提交到本地仓库的代码想撤销: git reset --hard <版本号>
  4. 把刚刚的提交撤回到暂存区: git reset --soft HEAD~1
  5. revert某此修改(会新增一条commit执行反向修改而已): git revert $id
  6. 回滚后反悔怎么办?: git reflog 记录了我们的每一次命令( commit、merge 等信息), 根据这命令来查出我们的历史 commit id,然后 git reset即可
  7. 另外,git rebase -i也可以撤销之前的提交。 edit修改,drop丢弃,squash合并压缩
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值