Git-基础知识

2020/7/12 Git

# git 工作流程

Git

// status
1. git status // 查看当前工作区和暂存区文件的状态(增加、修改、提交)
----------------------------------------------------------------------------------------------
// show
1. git show commitId // 查看某次提交的内容
2. git show tagName // 查看某个标签信息
----------------------------------------------------------------------------------------------
// add
1. git add . // 把工作区的修改提交到暂存区,`.` 表示所有文件
2. git add fileName // 把工作区的修改提交到暂存区,fileName 表示某一个文件
----------------------------------------------------------------------------------------------
// commit
1. git commit -m 'XXX' // 把暂存区的修改提交到本地仓库
2. git commit --amend // 修改最新提交的备注信息
----------------------------------------------------------------------------------------------
// fetch
1. git fetch // 拉取远程所有分支到本地,不进行合并
2. git fetch --tags -f // 强制同步远程和本地 tag
----------------------------------------------------------------------------------------------
// switch
1. git switch -c branchNmae // 新建 branchNmae 分支并切换到此分支,和 checkout -b 一样
----------------------------------------------------------------------------------------------
// cherry-pick
1. git cherry-pick commitId // 复制一个特定的提交到当前分支
----------------------------------------------------------------------------------------------
// rebase
1. git rebase // 可以把本地未push的分叉提交历史整理成直线,目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比
----------------------------------------------------------------------------------------------
// check-ignore
1. git check-ignore -v fileName // 查看 .gitignre 中的哪条规则命中了当前 fileName 文件
----------------------------------------------------------------------------------------------
// rm
1. git rm fileName // 删除 fileName 文件
----------------------------------------------------------------------------------------------
// log
1. git log // 查看全部的 commit 记录(以缺省格式显示)
2. git log -5 // 查看最新 5 条的 commit 记录
3. git log --abbrev-commit // 设置显示的格式,设置 commitId 以短的显示
4. git log --oneline // 设置显示的格式,只显示短的 commitId
5. git log --pretty=oneline // 设置显示的格式,只显示长的 commitId
6. git log --graph // 设置显示的格式,显示图形化的 branch 信息
7. git log --author=XXX // 搜索条件,以 XXX 为提交者名字的 commit 记录
8. git log --grep=XXX // 搜索条件,以 XXX 为提交内容的 commit 记录
9. git reflog // 查看工作区的 HEAD 更改的记录
----------------------------------------------------------------------------------------------
// branch
1. git branch // 查看本地的分支列表
2. git branch -a // 查看本地和远程的分支列表
2. git branch -v // 查看当前分支的最后一次提交记录
3. git branch -d branchName // 删除本地 branchName 分支
4. git branch -D branchName // 如果当前分支未进行合并,使用 -d 删除不了,需要使用 -D
5. git branch --set-upstream-to branchName origin/branchName // 本地 branchName 分支和远程 branchName 分支进行关联
----------------------------------------------------------------------------------------------
// diff
1. git diff // ⽐较⼯作区和暂存区的修改
2. git diff HEAD // ⽐较⼯作区和上⼀次commit后的修改
3. git diff --cached // ⽐较暂存区和上⼀次commit后的修改
----------------------------------------------------------------------------------------------
// config
1. git config --global user.name "chenjie" // 设置名称,--global 表示全局,不加表示当前仓库
2. git config --global user.email 785801610@qq.com // 设置邮箱
3. git config --global alias.st status // 设置命令别名,git st === git status
4. git config --list // 查看 config 配置
----------------------------------------------------------------------------------------------
// push
1. git push origin branchName // 把本地仓库的当前分支提交到远程仓库的 branchName 分支,如果远程仓库的 branchName 分支不存在则会被新建
2. git push -u origin branchName // -u 表示关联,设置本地分支与远程分支关联,下次推送可以直接使用 git push
3. git push -f/--force origin 分支名 // -f/--force 表示强制,即使远程仓库中比较新,本地会直接覆盖远程
4. git push origin --tags // 推送所有标签到远程仓库中
5. git push origin v1.0 // 推送 v1.0 标签到远程
6. git push origin :refs/tags/v1.0 // 删除远程 v1.0 标签
----------------------------------------------------------------------------------------------
// pull
1. git pull // 拉取远程所有分支到本地,并且合并到对应的分支中
2. git pull origin branchName // 拉取远程 branchName 分支到本地,并且合并到对应的分支中
----------------------------------------------------------------------------------------------
// reset
// HEAD 表示当前版本,上一个版本就是 HEAD^,上上一个版本就是 HEAD^^
// 当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
1. git reset --hard HEAD^ // 回退上一个 commit,--hard 表示强制删除工作区的修改
2. git reset --soft HEAD^ // 回退上一个 commit,--soft 表示不删除工作区的修改
2. git reset --hard commitId // 回退某一个 commit,commitId 值可以通过 git log 查看
3. git reset HEAD fileNmae // 回退 fileNmae 文件,从暂存区撤销掉,重新放回工作区
----------------------------------------------------------------------------------------------
// checkout
1. git checkout branchName // 切换到本地 branchName 分支
2. git checkout -b branchName // 新建 branchName 分支在本地并切换到此分支
3. git checkout -b branchName origin/branchName // 创建本地和远程分支并进行关联且切换到此分支
4. git checkout . // 撤销工作区所有文件的修改,也可以跟具体的文件名
5. git checkout --fileName // 撤销工作区当前文件的修改
----------------------------------------------------------------------------------------------
// merge
1. git merge branchName // 把 branchName 分支合并到当前所在的分支上
2. git merge branchName --no-ff -m 'XXX' // --no-ff 参数,表示禁用 Fast forward,会创建一个 merge 的 commit 信息
3. git merge --abort // 撤销当前的 merge
----------------------------------------------------------------------------------------------
// stash
1. git stash // 把当前分支上修改的东西暂存起来
2. git stash pop // 把暂存起来的东西弹出并删除暂存记录
3. git stash list // 查看当前暂存记录
4. git stash apply // 把暂存起来的东西弹出但不删除暂存记录
5. git stash drop stash@{0} // 删除对应的暂存记录
----------------------------------------------------------------------------------------------
// tag,对应某一个 commit,和分支很像,但是分支可以移动,标签不能移动,标签和 commit 类似域名和 ip
1. git tag // 查看所有标签
2. git tag v1.0 // 创建 v1.0 标签
3. git tag v1.0 commitId // 创建基于 commitId 提交的标签,如果不跟 commitId,默认使用当前分支最新的 commitId
4. git tag -a v1.0 -m "version 1.0 released" // -a 指定标签名,-m 指定说明文字
5. git tag -d v1.0 // 删除本地 v1.0 标签
----------------------------------------------------------------------------------------------
// remote
1. git remote -v // 显示所有远程仓库
2. git remote add origin remoteURl // 为本地仓库添加远程仓库地址(remoteURl),origin 是别名
3. git remote rm origin // 解除远程库和本地仓库的绑定
----------------------------------------------------------------------------------------------
// ssh
// 密钥类型可以用 -t 选项指定。如果没有指定则默认生成用于SSH-2的RSA密钥。这里使用的是rsa
// 同时在密钥中有一个注释字段,用-C来指定所指定的注释,可以方便用户标识这个密钥,指出密钥的用途或其他有用的信息
1. ssh-keygen -t rsa -C "785801610@qq.com" // 生成公钥 id_rsa.pub,三次回车,路径:C:\Users\Administrator\ssh
2. cat ~/.ssh/id_rsa.pub // 查看公钥
----------------------------------------------------------------------------------------------
// crlf/lf
1. git config --global core.autocrlf input
----------------------------------------------------------------------------------------------
// 取消忽略大小写
1. git config --global core.ignorecase false // 如果设置了全局不生效,则需要到对应项目中去设置且不需要加 --global
----------------------------------------------------------------------------------------------
// 其他
1. 团队要方便管理公钥使用 Gitosis
2. 团队要像SVN那样变态地控制权限使用 Gitolite
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
Last Updated: 2024/6/11 14:20:38
    飘向北方
    那吾克热-NW,尤长靖