git
1. concept

Workspace:工作区(clone或者原始内容)
Index/Stage:暂存区(有增删改查后add到临时区)
Repository:本地仓库(保存了本地的增删改查记录)
Remote:远程仓库(本地的记录提交到远端,供团队所有人查看使用)
2. git核心对象(tree、blob、commit)
git cat-file [-t|-p] id //t是type p是内容

3. note
分离头指针一定要跟branch或tag绑在一起,否则会丢掉
git checkout commit-SHAif meet unnormal
git help [--web] command
gitk --all
git 中部分选项解释
how to write git comment
add / feature 添加新功能 fix 缺陷修复 hotfix 紧急的缺陷修复 update 对已有功能进行更改或优化 remove / rm / delete 删除部分代码、功能 refactor. 重构了一些代码、功能 workflow 工作流程更改 chore 琐碎的修改
4. config
5. init
6. status
7. add/rm file
8. commit
9. branch
10. merge
11. rebase
rebase过程中,也许会出现conflict
git会停止rebase,需要解决冲突
解决完,使用git add添加冲突的文件,更新暂存区
git rebase --continue继续剩下的rebase
git rebase --abort终止rebase行为,回到rebase开始之前的状态
12. diff
13. log
14. remote sync
15. 撤销
16. .gitignore
空行 或 # 开头的行会被忽略
可以使用标准的glob模式匹配
0个或任意个字符
[abc] 任意其中一个字符
? 匹配一个字符
[0-9] 表示匹配任意中间的字符
** 两个星表示任意中间目录 a/**/c a/b/c a/d/c
以/开头防止递归
以/结尾指定目录
用!反向选择
17. alias
18. tags
19. stash
默认情况下,git stash会缓存: 添加到暂存区的修改(staged changes ) Git跟踪但并未添加到暂存区的修改(unstaged changes) 但不会缓存: 在工作目录中新的文件(untracked files) 被忽略的文件(ignored files) 此时,使用-u或者--include-untracked可以stash untracked文件;使用-a或者--all可以stash当前目录下的所有修改(慎用)
20. Merge vs Rebase

merge

rebase


21. Reset、Revert、 Checkout
reset和checkout可以作用于commit或者文件,revert只能作用于commit
reset 将一个分支的末端指向另一个提交,可以用来移除当前分支的一些提交
--soft:stage和workspace都不会被改变
--mixed(默认):stage和你指定的提交同步,但workspace不受影响
--hard:stage和workspace都同步到你指定的提交
checkout 提交层面上的checkout可以切换分支,同一分支,可以切换当前HEAD。文件层面上不会移动HEAD指针,也不会切换到其他分支上,只是更改workspace,而不是stage
revert 撤销一个提交的同时会创建一个新的提交
git reset
提交层面
在私有分支上舍弃一些没有提交的更改
git reset
文件层面
将文件从缓存区中移除
git checkout
提交层面
切换分支或查看旧版本
git checkout
文件层面
舍弃工作目录中的更改
git revert
提交层面
在公共分支上回滚更改
git revert
文件层面
(然而并没有)
Reset、Revert、 Checkout
reset和checkout可以作用于commit或者文件,revert只能作用于commit
commit级别的操作
reset

git reset用于撤销未被提交到remote的改动,即撤销local的修改。除了移动当前分支的HEAD,还可以更改workspace和index:
--soft:修改HEAD,不修改index和workspace
--mixed:修改HEAD和index,不修改workspace。默认行为
--hard:修改HEAD、index、workspace
checkout
checkout作用于commit级别时,只是移动HEAD到不同的commit。如果有unstaged的文件,git会阻止操作并提示。如果使用commit-SHA作为参数,可能会导致野指针
revert
revert通过新建一个commit来撤销一次commit所做的修改,是一种安全的方式,并没有修改commit history
revert用于撤销committed changes,reset用于撤销uncommitted changes
file级别的操作
reset
git reset 只修改index去匹配某次commit
git reset HEAD filename把文件从index退回workspace,并将更改保存在workspace中
checkout
git checkout 只修改workspace去匹配某次commit
git checkout HEAD filename抹掉文件在workspace的修改
总结
git reset
Commit-level
Discard commits in a private beanch or throw away uncommited changes
git reset
File-level
Unstage a file
git checkout
Commit-level
Switch between branches or inspect old snapshots
git checkout
File-level
Discord changes in the working directory
git revert
Commit-level
Undo cimmits in a pulic branch
git revert
File-level
N/A
22. 搭建Git服务器
其实就是搭建私有仓库,推荐使用Linux服务器如Ubuntu或Debian,假设你有sudo权限的账号
sudo apt-get install git # 安装Git
sudo adduser git # 创建一个Git用户,用来运行Git服务
创建证书登录:# 收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个
初始化Git仓库 # 先选定一个目录作为Git仓库,在该目录下输入命令(比如目录:/srv): sudo git init --bare sample.git sudo chown -R git:git sample.git
禁用shell登录,通过编辑/etc/passwd文件完成 git❌1001:1001:,,,:/home/git:/bin/bash 改为: git❌1001:1001:,,,:/home/git:/usr/bin/git-shell
克隆远程仓库: git clone git@server:/srv/sample.git
23. resolve git clone too slow
Last updated