Skip to content

Commit 170a94f

Browse files
committed
A test.Add my note
1 parent 9b71c90 commit 170a94f

File tree

1 file changed

+183
-0
lines changed

1 file changed

+183
-0
lines changed

2021-06/Git_note_XcYe.md

Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
## 廖雪峰—Git
2+
3+
#### 创建版本库
4+
5+
1.创建空目录 mkdir cd pwd
6+
2.将目录变成Git可管理仓库 git init ls -ah
7+
8+
#### 文件添加版本库
9+
10+
1.文件添加到仓库 git add xxx
11+
2.文件提交到仓库 git commit -m "xxx" git commit -a --allow-empty-message -m ""
12+
13+
#### 更改文件与提交
14+
15+
1.更改文件
16+
2.查看更改 查看状态git status 对比git diff xxx
17+
3.提交更改 ①git add xxx 看状态(将要提交的修改)git status ②提交git commit -m "xxx" (看状态)
18+
看历史记录 git log git log --pretty==oneline
19+
20+
#### 版本回退
21+
22+
Head 当前版本 Head^上一版 Head^^上上一版本 HEAD~100
23+
1.退回上一版本 git reset --hard HEAD^
24+
     查看版本库状态(历史提交版本) git log --pretty=oneline [已无最新的版本]
25+
     显示文档 cat xxx
26+
2.返回上一版(重返未来) git reset --hard xxx(commit_id)
27+
     若clear了看不到新id(查看命令历史) git **reflog**
28+
29+
#### 工作区和暂存区
30+
31+
工作区—— 文件夹(电脑可看目录)
32+
版本库—— .git
33+
git add 文件由**工作区**添加到**暂存区**,即stage(index);git commit将**暂存区**内容提交到**分支**(仓库)
34+
需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
35+
对比:
36+
git diff xxx 比较的是**工作区**文件与**暂存区**文件的区别
37+
git diff --cached xxx **暂存区**和HEAD(**仓库**)的不同
38+
git diff HEAD --xxx 查看**工作区****仓库**(版本库**最新版本**)的差异
39+
git checkout xxx 把**暂存区**最新版本转移到**工作区**(撤销工作区修改) git add的反向命令
40+
git reset HEAD xxx 把**仓库**最新版本转移到**暂存区** git commit反向命令
41+
42+
Git跟踪修改:每次修改,如果不用git add到暂存区,那就不会加入到commit中。
43+
44+
#### 撤销修改
45+
46+
1.丢弃**工作区**的修改 git checkout -- xxx
47+
     1.修改后还没有被放到暂存区,撤销回到和版本库一模一样的状态
48+
     2.已经添加到暂存区,撤销回到添加到**暂存区**后的状态
49+
即,让这个文件回到最近一次 git commit 或 git add 时的状态。
50+
2.丢弃**暂存区**的修改
51+
     1.git reset HEAD xxx (把暂存区的修改撤销(unstage),重新放回**工作区**)
52+
     2.git checkout -- xxx 丢弃工作区修改
53+
3.丢弃**版本库**的修改 即版本回退
54+
55+
#### 删除文件
56+
57+
1.删除目标文件 手动 / rm命令
58+
     工作区和版本库不一致 通过git status可以查看哪些文件被删除
59+
2.两种情况:
60+
     1.从版本库中删除该文件 ①git rm xxx ②git commit -m "xxx"
61+
     2.误删,需要恢复(到版本库最新版本) git checkout -- xxx [用版本库里的版本替换工作区的版本,不论工作区修改/删除,皆还原]
62+
     注:如果从版本库中删除了文件又想恢复,可以用版本回退。
63+
64+
#### 远程仓库
65+
66+
1.通过SSH连接远程仓库 在主目录 ssh-keygen -t rsa -C "[email protected]"
67+
     有 id_rsa 和 id_rsa.pub 这两个文件
68+
2.登陆Github-SSH Keys 粘贴 id_rsa.pub 内容(公钥)
69+
70+
###### 添加远程库
71+
72+
1.github-create a new repo-输入name,create。成功创建一个新的Git仓库(空的)。
73+
2.**关联远程库** git remote add **origin** https://github.com/XiaochengYe/learngit.git
74+
3.本地库内容**推送** git push -u origin master (远程仓库不为空,不用-u)
75+
     1.若报错OpenSSL SSL_read: Connection was reset, errno 10054
76+
     解决方法:查询下面三个域名ip:github.com、github.global.ssl.fastly.net、codeload.Github.com。找到hosts文件,将上述三行(带ip)放在末尾,保存。https://blog.csdn.net/qq_29493173/article/details/113092656
77+
     也可以解除SSL验证 git config --global http.sslVerify "false"
78+
     2.若报错failed to push some refs to https://github.com/XiaochengYe/learngit.git
79+
     解决方法:新创建的那个仓库里面的README文件不在本地仓库目录中,这时可以同步内容。git pull --rebase origin master 再 push。
80+
     3。若验证连接ssh -T [email protected]提示输入 输入yes
81+
之后,只要本地做了提交。git push origin master 即可将本地master分支**最新修改**推送至Github。
82+
83+
###### 删除远程库
84+
85+
1.先用 git remote -v 查看远程库信息。
86+
2.根据名字删除 git remote rm xxx
87+
“删除”其实是**解除**了本地和远程的绑定关系,并不是物理上删除了远程库。
88+
89+
###### 从远程库克隆
90+
91+
git clone [email protected]:michaelliao/gitskills.git 或 git clone https://github.com/XiaochengYe/gitskills
92+
(前者Git用ssh协议会更好)
93+
94+
#### 分支管理
95+
96+
###### 创建与合并分支
97+
98+
![git-br-initial](./pic/0.png)
99+
1.**创建并切换**dev分支 git checkout -b dev
100+
         即:**创建分支**git branch dev; **切换分支**git checkout dev
101+
     **查看当前分支** git branch
102+
2.git add和commit修改
103+
3.分支工作完成切换回master分支
104+
     法一:git checkout master
105+
     法二:**创建并切换**到dev分支git switch -c dev **切换**已有分支 git switch master[同1]
106+
4.将dev分支的工作成果**合并到当前**(master)分支 git merge dev
107+
5.**删除**dev分支 git branch -d dev
108+
     git branch 查看,只有master
109+
110+
###### 解决冲突
111+
112+
1.新分支 git switch -c feature1
113+
     修改readme.txt 在feature1分支上提交(add commit)
114+
2.切换 master git switch master
115+
     修改readme.txt 在master分支上提交(add commit)
116+
3.合并 git merge feature1
117+
     冲突!git status查看,cat xxx查看readme.txt的内容。
118+
     修改文件,再提交。(add commit)
119+
4.查看分支合并情况 **git log --graph** --pretty=oneline --abbrev-commit
120+
5.删除feature1分支 git branch -d feature1
121+
**小结**:当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
122+
123+
###### 分支管理策略
124+
125+
合并分支时,加上`--no-ff`参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而`fast forward`合并就看不出来曾经做过合并。
126+
127+
1.创建并切换dev分支 git switch -c dev
128+
2.修改readme.txt文件,提交。
129+
3.切换回master git switch master
130+
4.合并dev分支 git merge --no-ff -m "merge with no-ff" dev (禁用Fast forward)
131+
     本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
132+
5.查看分支历史 git log --graph --pretty=oneline --abbrev-commit
133+
     不使用Fast forward模式。可以看到dev分支。
134+
135+
###### bug分支
136+
137+
1.查看工作区 git status (有未提交内容)
138+
2.储藏工作现场 git stash
139+
     git status,工作区干净状态。
140+
3.在master分支修复bug,创建临时分支。
141+
     git checkout master
142+
     git checkout -b issue-101
143+
     提交add、commit。
144+
4.修复完成,切回master,并完成合并,删除issue-101分支。
145+
     git switch master
146+
     git merge --no-ff -m "merged bug fix 101" issue-101
147+
     git branch -d issue-101
148+
5.回dev干活。恢复工作区
149+
     1.git switch dev
150+
     2.git status查看,工作区是干净的。
151+
     3.git stash list查看列表,恢复。
152+
         1.git stash apply stash内容并不删除 git stash drop删除
153+
         2.git stash pop 把stash内容也删
154+
**小结**
155+
1.修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除。
156+
2.当手头工作没有完成时,先把工作现场 `git stash` 一下,然后去修复bug,修复后,再`git stash pop`,回到工作现场。
157+
3.在master分支上修复的bug,想要合并到当前dev分支,可以用`git cherry-pick <commit>`命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
158+
159+
###### Feature分支
160+
开发一个新 feature,最好新建一个分支。
161+
如果要丢弃一个没有被合并过的分支,可以通过 git branch **-D** <name> 强行删除。
162+
163+
###### 多人协作
164+
165+
166+
167+
168+
169+
170+
171+
172+
173+
174+
175+
176+
177+
178+
179+
180+
181+
182+
183+

0 commit comments

Comments
 (0)