1、git restore –staged
git reset HEAD
2、在当前所在的位置,新建文件夹
1 | $ mkdir learngit |
3、打印当前工作目录,把当前完整路径显示出来。
1 | $ pwd |
4、ls(列出当前文件夹里的内容)、cd ..(退回上一级文件夹)
5、把仓库强制回退到指定的某次历史提交
1 | $ git reset --hard 1094a |
git reset 有三个模式,区别在于”回退之后,工作区和暂存区的文件怎么办”:
- –soft:只移动指针,文件一个字节都不动,回退掉的改动还留着且已暂存
- –mixed(默认):移动指针,改动保留在工作区但未暂存
- –hard:移动指针,并且把工作区文件强制覆盖成那次提交的内容——未提交的本地修改直接丢弃,找不回来
1 | git log |
6、cat readme.txt 的意思是:把 readme.txt 这个文件的内容显示在终端里
7、好难懂的 diff 啊!!??
1 | $ git diff HEAD -- readme.txt |
a/ 代表旧版本(HEAD 里的),b/ 代表新版本(工作区的)
1 | git diff # 工作区 vs 暂存区 |
1 | # 1. 改一行 readme.txt,然后看"工作区 vs 暂存区" |
8、git checkout 和git reset 都怎么用,有什么区别
git checkout — 本意是”切换”,兼职能”还原文件”
1 | git checkout dev # 切换到 dev 分支 |
git reset — 本意是”移动 HEAD 指针,回退历史”
1 | # 回退版本 |
HEAD^ 表示上一个提交,HEAD^^ 上上个,HEAD~100 往前 100 个
1 | # 场景1:readme.txt 改乱了,想放弃修改(还没 add) |
1 | # 等价于 git checkout dev(切换分支) |
9、默认分支的切换
让以后 git init 出来的仓库默认就是 main
这一条配完,以后你本地新建的所有仓库,第一个分支就叫 main,和 GitHub 默认保持一致,不会再出现 master。
1 | git config --global init.defaultBranch main |
当前仓库把 master 改名成 main
1 | git branch -m master main |
1 | # 推送 |
10、从远程库克隆
1 | cd /d/code # 1. 先进入父目录 |
11、分支相关命令
1 | # 建分支:放一个指向当前提交的新指针,并切过去 |
1 | # 查看:列出所有本地分支,带 * 的是当前所在分支 |
1 | git branch dev # 创建 dev,但不切换 |
1 | git log --graph # 查看分支合并图。 |
Fast-forward 的含义:
Fast-forward(快进)是 Git 合并分支时的一种最省事的情况:当你要合并的分支只是在你当前分支的基础上往前多走了几步,中间没有分叉时,Git 不需要做任何”合并计算”,直接把当前分支的指针往前挪到目标位置。
–no-ff:故意禁用快进
1 | git merge --no-ff -m "merge feature1: add xxx功能" feature1 |
12、git stash的含义、用法、场景
git stash 的作用是:把工作区和暂存区里没提交的改动打包存进一个”临时储藏柜”,把工作区还原干净,之后随时可以取出来恢复。
1 | git stash # ① 半成品收进柜子,工作区瞬间干净 |
stash 用法全览:
1 | # 最基本的用法 |
查看柜子里有什么:
1 | git stash list |
从柜子里取出来:
1 | # 取出最新一份(stash@{0}),取完从柜子里删掉 |
清理:
1 | git stash drop stash@{0} # 删掉某一份 |
13、cherry-pick 介绍:
cherry-pick 是什么
cherry-pick 英文原意是”摘樱桃”——从一堆里只挑自己要的。Git 里它的作用是:把另一个分支上的某一次(或几次)提交,单独”摘”过来,复制到当前分支上。(不是全要,是选取)
1 | git cherry-pick C4的编号 |
C4’ 是 C4 的复制品——改动内容一样,但提交编号变了(因为它嫁接在不同的历史上)。
用法:
1 | # 1. 先站到"接收方"分支上 |
1 | # 向GitHub服务器发送一个请求,只取回响应头,不加载网页内容 |
给git配上代理:
1 | # 改成相应的端口号 |
查看是否生效:
1 | git config --global --get http.proxy |
一次性列出所有全局配置
1 | git config --global -l |