Skip to content

Commit 88bda0e

Browse files
committed
thans for liaoxuefeng! thi is my study notebook~~
1 parent 4da2ca0 commit 88bda0e

File tree

1 file changed

+204
-0
lines changed

1 file changed

+204
-0
lines changed

gdouchufu.txt

Lines changed: 204 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,204 @@
1+
安装Git
2+
* 在Linux上安装Git:
3+
* Debian或Ubuntu: sudo apt-get install git
4+
* 其它Linux通过源码安装git:
5+
先从Git官网下载源码,然后解压,依次输入:
6+
./config,make,sudo make install
7+
* 在windows上安装Git:
8+
* msysgit是Windows版的Git,从http://msysgit.github.io/下载
9+
* Tortoisegit是git的客户端
10+
* 安装完设置:(--global参数,表示你这台机器上所有的Git仓库都会使用这个配置)
11+
$ git config --global user.name "Your Name"
12+
$ git config --global user.email "[email protected]"
13+
* git --version
14+
15+
创建版本库
16+
* 创建文件夹learngit,用来放置版本库
17+
* $ git init
18+
把这个目录变成Git可以管理的仓库
19+
* $ git add readme.txt
20+
编写一个readme.txt文件,放到learngit目录下,通过命令将文件添加到仓库
21+
* $ git commit -m "wrote a readme file"
22+
把文件提交本地到仓库
23+
24+
时光机穿梭
25+
* 查看版本库的状态:(将要被提交的修改包括了什么)
26+
* 修改readme.txt,使用以下命令:
27+
* $ git status
28+
* $ git diff readme.txt
29+
* $ git add readme.txt
30+
* $ git commit -m "add distributed"
31+
* 版本回退
32+
* $ git log 查看提交历史,以便确定要回退到哪个版本
33+
$ git log --pretty=oneline 可以减少输出信息
34+
* $ git reset --hard commit_id 在版本的历史之间穿梭
35+
上一个版本就是HEAD^,上上一个版本就是HEAD^^,往上100个版本写成HEAD~100
36+
* $ git reflog 查看命令历史,以便确定要回到未来的哪个版本
37+
* 工作区和暂存区
38+
* 工作区(Working Directory):就是你在电脑里能看到的目录,比如learngit文件夹就是一个工作区
39+
* 版本库(Repository):工作区有一个隐藏目录.git,这个是Git的版本库。
40+
* Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,
41+
还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
42+
* 文件往Git版本库里添加的时候,是分两步执行的:
43+
* 第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
44+
* 第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
45+
* 简单理解为:需要提交的文件修改通通放到暂存区,然后一次性提交暂存区的所有修改。
46+
* 管理修改
47+
* Git管理的是修改,而不是文件
48+
* 每次修改,如果不add到暂存区,那就不会加入到commit中
49+
* 撤销修改
50+
* 把readme.txt文件在工作区的修改全部撤销,有两种情况:
51+
* 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态:
52+
* $ git checkout -- readme.txt
53+
* 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态:
54+
* $ git reset HEAD readme.txt //把暂存区的修改撤销掉(unstage),重新放回工作区
55+
* $ git checkout -- readme.txt //丢弃工作区的修改
56+
* 删除文件
57+
* $ git rm test.txt (删除也是修改,将修改信息提交到暂存区)
58+
* $ git checkout -- test.txt //撤销删除
59+
* $ git commit -m "remove test.txt" //从版本库中删除该文件
60+
61+
远程仓库
62+
* 设置SSH的私钥和密钥
63+
* 第1步:创建SSH Key
64+
$ ssh-keygen -t rsa -C "[email protected]"
65+
* 第2步:登陆GitHub
66+
打开“Account settings”,“SSH Keys”页面;
67+
点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容
68+
* 在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,id_rsa.pub是公钥
69+
* 添加远程仓库
70+
* $ git remote add origin [email protected]:gdouchufu/learngit.git
71+
把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库
72+
* $ git push -u origin master
73+
把本地库的所有内容推送到远程库上
74+
(第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,
75+
还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。)
76+
* 从远程仓库克隆
77+
* $ git clone [email protected]:gdouchufu/gitskills.git
78+
* Git支持多种协议,包括https,默认的git://使用ssh,通过ssh支持的原生git协议速度最快
79+
80+
分支管理
81+
* 创建与合并分支
82+
* $ git checkout -b dev //创建并切换到dev分支,相当于:
83+
$ git branch dev
84+
$ git checkout dev
85+
* $ git branch
86+
查看当前分支
87+
* $ git checkout master
88+
切换回master分支
89+
* $ git merge dev
90+
* 把dev分支的工作成果合并到master分支上
91+
* Fast-forward 是“快进模式”,也就是直接把master指向dev的当前提交,合并速度非常快。
92+
* $ git branch -d dev
93+
删除dev分支
94+
* git鼓励使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全!
95+
* 解决冲突
96+
* $ git log --graph --pretty=oneline --abbrev-commit
97+
--graph 查看分支合并图,--abbrev-commit 只显示commitID的前7位
98+
(出现冲突时手动更改冲突文件,把冲突文件add到stage后commit,即可fix冲突)
99+
* 分支管理策略
100+
* Merge made by the 'recursive' strategy.
101+
* 合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息;
102+
* 如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
103+
* $ git merge --no-ff -m "merge with no-ff" dev
104+
* --no-ff参数,表示禁用Fast forward
105+
* 因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
106+
* 分支策略的基本原则
107+
* master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活
108+
* 干活都在不稳定的的dev分支上,发布版本新时,再把dev分支合并到master上,在master分支发布1.0版本
109+
* Bug分支
110+
* $ git stash
111+
把当前工作现场“储藏”起来,等以后恢复现场后继续工作
112+
statsh : 隐藏,藏匿;贮藏;〈英〉停止
113+
* $ git stash list
114+
查看保存的工作现场列表
115+
* 恢复工作现场的2个方法:
116+
* 1、用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除
117+
* 2、用git stash pop,恢复的同时把stash内容也删了
118+
* $ git stash apply stash@{0}
119+
多次stash后恢复的时候,先用git stash list查看,然后恢复指定的stash
120+
* 强制删除分支
121+
$ git branch -D feature-vulcan
122+
* 多人协作
123+
* $ git remote //查看远程仓库信息
124+
* $ git remote -v //显示更详细的信息
125+
* 推送分支
126+
* 哪些分支需要推送到远程仓库,哪些不需要?
127+
* $ git push origin master //master分支是主分支,因此要时刻与远程同步;
128+
* $ git push origin dev //dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
129+
* feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
130+
* push失败时,先 git pull ,在本地合并后手动解决冲突,再推送
131+
* 抓取分支
132+
* $ git pull
133+
抓取远程仓库的最新版到当前分支
134+
* $ git checkout -b dev origin/dev
135+
创建远程origin的dev分支到本地
136+
* $ git branch --set-upstream dev origin/dev
137+
设置dev和origin/dev的链接
138+
* $ git push origin dev
139+
将本地的dev分支push到远程的dev分支上
140+
141+
标签管理
142+
* 创建标签
143+
* $ git tag
144+
查看所有标签(标签不是按时间顺序列出,而是按字母排序的)
145+
* $ git tag v1.0
146+
在最新提交的commit上打标签为v1.0
147+
* $ git tag v0.9 6224937
148+
在commit id为6224937的提交上打标签
149+
* $ git show v0.9
150+
查看标签信息
151+
* $ git tag -a v0.1 -m "version 0.1 released" 3628164
152+
创建带有说明的标签,用-a指定标签名,-m指定说明文字
153+
* $ git tag -s v0.2 -m "signed version 0.2 released" fec145a
154+
通过-s用私钥签名一个标签,签名采用PGP签名,必须先安装gpg(GnuPG)
155+
* 操作标签
156+
* $ git tag -d v0.1
157+
删除本地标签
158+
* $ git push origin v1.0
159+
推送某个标签到远程
160+
* $ git push origin --tags
161+
一次性推送全部尚未推送到远程的本地标签
162+
* 删除已经推送到远程的标签
163+
* 先从本地删除:$ git tag -d v0.9
164+
* 再从远程删除:$ git push origin :refs/tags/v0.9
165+
使用GitHub
166+
* 在GitHub上,可以任意Fork开源仓库;
167+
* 自己拥有Fork后的仓库的读写权限;
168+
* 可以推送pull request给官方仓库来贡献代码。
169+
170+
171+
自定义Git
172+
* $ git config --global color.ui true
173+
* 让Git显示颜色,让命令输出看起来更醒目
174+
* --global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用
175+
* 忽略特殊文件
176+
* Git工作区的根目录下创建一个特殊的.gitignore文件,把要忽略的文件名填进去,Git就会自动忽略这些文件
177+
* 所有配置文件可以直接在线浏览:https://github.com/github/gitignore
178+
* 配置别名
179+
* $ git config --global alias.st status
180+
用git st代替git status
181+
* 用co表示checkout,ci表示commit,br表示branch
182+
* $ git config --global alias.co checkout
183+
* $ git config --global alias.ci commit
184+
* $ git config --global alias.br branch
185+
* $ git config --global alias.unstage 'reset HEAD'
186+
$ git reset HEAD test.py --> $ git unstage test.py
187+
* $ git config --global alias.last 'log -1'
188+
$ git last //显示最近一次的提交
189+
* git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
190+
丧心病狂! 方便地查看git log ...
191+
* 搭建Git服务器
192+
* 第一步,安装git:
193+
$ sudo apt-get install git
194+
* 第二步,创建一个git用户,用来运行git服务:
195+
$ sudo adduser git
196+
* 第三步,创建证书登录:
197+
收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个
198+
* 第四步,初始化Git仓库:
199+
先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:$ sudo git init --bare sample.git
200+
把owner改为git : $ sudo chown -R git:git sample.git
201+
* 第五步,禁用shell登录:
202+
编辑/etc/passwd文件,将git:x:1001:1001:,,,:/home/git:/bin/bash 改为:git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
203+
* 第六步,克隆远程仓库:
204+
$ git clone git@server:/srv/sample.git

0 commit comments

Comments
 (0)