Git¶
配置¶
设置 Commit 时的用户名:
设置 Commit 时的邮箱:
启用有帮助的彩色命令行输出:
分支¶
创建¶
用 commit hash 创建分支:
用符号引用(symbolic reference)创建分支:
创建分支并切换:
推送¶
将分支推送到远程:
本地关联远程分支(这样 push 或 pull 时不需要再指定分支):
将本地分支推送到远程,同时本地关联远程分支(本地和远程的分支都叫 branch_name):
删除¶
删除本地分支前,先切到其他分支。
删除本地分支,如果分支没被合并则不允许删除:
强制删除本地分支,不管是否被合并:
删除远程分支:
删除远程分支后,更新本地分支列表(-p
即 --prune
):
重命名¶
重命名本地分支:
HEAD 引用¶
HEAD 文件通常是一个符号引用(symbolic reference),指向目前所在的分支。 所谓符号引用,表示它是一个指向其他引用的指针。
-
HEAD 指向当前所在分支提交至仓库的最新一次的 commit。
-
~
是用来在当前提交路径上回溯的修饰符。HEAD~{n} 表示当前所在的提交路径上的前 n 个提交(n >= 0):
HEAD = HEAD~0
HEAD~ = HEAD~1
HEAD~~ = HEAD~2
-
^
是用来切换父级提交路径的修饰符。当我们始终在一个分支比如 dev 开发/提交代码时,每个 commit 都只会有一个父级提交,就是上一次提交,但当并行多个分支开发,feat1, feat2, feat3,完成后 merge feat1 feat2 feat3 回 dev 分支后,此次的 merge commit 就会有多个父级提交。
Windows CMD 中的坑¶
在 Windows CMD 中,^
是转义符。输入单个 ^
的话,命令行就会在下一行问 More?
让你继续输入需要转义的内容。^^
才会被识别为 ^
。
要想让 git 正确识别 HEAD^
,需要输入 HEAD^^
或者用双引号包裹 "HEAD^"
。换 powershell、git bash 也行。
路径大小写不敏感¶
Git 默认不区分路径大小写,类似 Windows。比如把 Test
改名为 test
是没用的,Git 认为没有发生变化。
可以设置
让 Git 区分大小写,但是不推荐,我遇到过问题:执行这条命令后,把 Test
改名为 test
再提交,远程仓库里同时存在 Test
和 test
,但是本地仓库里只有 test
。
上面的问题只能用最朴素的办法来解决:
- 把
Test
改名为Test1
- 提交
- 把
Test1
改名为test
- 提交
Sync Fork¶
直接在 GitHub 上点 Sync Fork
有可能产生一个新的 Commit,污染提交记录。下面用 Rebase 来同步,保证干净的提交记录。
-
添加原来的远程库,可以起名为
fork
: -
拉取原来的远程库的信息:
-
切到需要同步的本地分支,然后 rebase:
-
强制推送至云端:
+
是强制推送的意思,也可以用下面的方法:
Squash Merge¶
将多个提交合并成一个,然后 Merge,需要自己再写一个 Commit:
删除中间几个 Commit¶
使用交互式 Rebase 来删除中间的 Commit:
这行命令会先在编辑器中打开一个文件,在文件中可以给不想要的 Commit 标记上 drop,然后保存关闭文件。之后 git 会执行 Rebase,删掉标记了 drop 的 Commit。
Pull¶
git pull
是 git fetch
+ git merge
。