-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnote.txt
More file actions
149 lines (121 loc) · 6.83 KB
/
note.txt
File metadata and controls
149 lines (121 loc) · 6.83 KB
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
1. Git安装后需要设置一下用户
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
2. 创建版本库 (请确保目录名(包括父目录)不包含中文。)
$ mkdir git_study
$ cd git_study
! $ git_init
3. 把文件添加到版本库
所有的版本控制系统,其实只能跟踪文本文件的改动。
第一步,把文件添加到仓库
! $ git add readme.txt
第二步,把文件提交到仓库
! $ git commit -m <message>
4. 运行 git status 查看结果
! $ git status
5. 运行 git diff filename 查看文件的变动
! $ git diff readme.txt
6. 运行 git log 查看变动历史
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数
! git log
7. 版本回退
$ git reset --hard HEAD^ 回退到上一个版本
$ git reset --hard HEAD^^ 回退到上上个版本
$ git reset --hard HEAD~n 回退往上的到第n个版本
! $ git reset --hard commit id 回退到commit id的版本,可以使前几个字符。
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL:
┌────┐
│HEAD│
└────┘
│
└──> ○ append GPL
│
○ add distributed
│
○ wrote a readme file
改为指向add distributed:
┌────┐
│HEAD│
└────┘
│
│ ○ append GPL
│ │
└──> ○ add distributed
│
○ wrote a readme file
8. 查看命令的历史记录
! $ git reflog
9. 工作区和暂存区
工作区 就是电脑里的一个目录
暂存区 工作区里有一个.git目录,这是Git的版本库。版本库里最重要的东西成为stage的暂存区,
还有Git创建的第一个分支master,以及指向master的指针叫做HEAD。
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
git diff #是工作区(work dict)和暂存区(stage)的比较
git diff --cached #是暂存区(stage)和分支(master)的比较
10. 撤销修改
! git checkout -- file 用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
git reset HEAD <file>
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,
分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
11. 删除文件
! git rm 删除一个文件。
12. 创建SSH Key 在用户主目录下看看有没有.ssh目录(C:\Users\Administrator),如果没有用一下命令创建一下。
$ ssh-keygen -t rsa -C "youremail@example.com"
然后一路回车,如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,
这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
13. 把本地库推送到github
先关联
git remote add origin https://github.com/zhujt4github/git_study.git
第一次推送
git push -u origin master
以后再推送 就可以直接用
$ git push origin master
14. 从远程clone一个仓库
新建一个文件夹,右键运行“Git Bash Here”
输入git clone https://github.com/zhujt4github/test.git 可以把远程库复制到本地
15. 分支branch
创建分支
$ git branch dev
切换到分支
$ git checkout dev
或者直接用 $ git checkout -b dev 创建并切换到分支
$ git branch 查看分支,带*号的为当前分支
合并分支
$ git merge branch_name 命令用于合并指定分支到当前分支。
删除分支
$ git branch -d dev 删除dev分支
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
删除分支:git branch -d <name>
16. 分支合并冲突
当多个分支进行提交时,可能存在冲突,Git无法执行快速合并,只能试图把各自修改合并起来,冲突只能手动修改完再提交
$ git log --graph 用图形方式查看合并情况
17. 状态存储
Git提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
$ git stash 把当前的工作状态存储起来
$ git stash list 查看已经存储的工作状态
恢复现场
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了,
18. 未被追踪的文件:指的是新建的文件或文件夹且还没加入到暂存区(新建的还没有被git add 过得)
未加入到暂存区的文件:指的是已经被追踪过,但是没有加入到暂存区(已经执行过git add/commit的但是这次修改后还没有git add)
举例: readme.md 已经被git add/git commit过,但是呢 我这次只是修改了,而且没有修改完,
不能commit test 新建的文件夹,没有被git add/git commit过 有个急事需要处理,这时候我需要切换分支,
去处理紧急任务,比如文中的举例去修改bug,
正确的步骤: git add test(让git去追踪这个新文件)
git stash保留现场
如果我不执行这两个命令,那么我在修改BUG完成之后 git status,
就会发现readme.md 没有添加到暂存区,同时又多了个test文件,但是自己的readme.md没有完成,万万不可以提交,
这样导致bug的修改代码也提交不了。所以你需要 git stash,这样你在提交修改bug代码的时候 ,就不会看见readme.md 和 test。可以安心提交修改bug的代码。
19. 开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。