forked from dcxy/learngit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpxtj.txt
139 lines (130 loc) · 10.6 KB
/
pxtj.txt
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
1.初始化仓库:git init
2. 往仓库中添加文件:
git add <filename> //将文件修改添加到暂存区
git commit -m "文件说明" //将暂存区中的所有内容提交到当前分支
3. 查看仓库状态:git status
4. 比较文件的不同,或者查看文件修改的地方:
git diff <filename>
5. 版本回退
查看历史记录:git log
查看最近的某次的记录:git log -<数字> //查看最近的指定某次的记录
查看精简的历史记录:git log --pretty=oneline
查看输入命令的记录:git reflog
版本表示:当前版本表示为HEAD,上一个版本表示为HEAD^,上上个版本表示为HEAD^^
上100个版本可以表示为HEAD~100
版本回退:git reset --hard <版本id> 举例:git reset --hard HEAD^ //表示返回到上一个版本;
6. 查看某一文件的内容:Linux命令,如 cat ,more等;
7. Git的工作区和暂存区
(1)工作区(Working Direction):所编辑的文件所在的目录;
(2)版本库(Repository):工作区文件夹中的.git文件夹;
方式:git add <filename> 将文件修改信息从工作区添加到暂存区;
git commit -m "说明" 将暂存区的信息添加到分支;
8. Git跟踪的文件的修改而不是文件本身:每次修改如果不add到暂存区,那么当commit提交时就不会添加到分支中。
9. 撤销修改:
命令:git checkout -- <文件名> 如:git checkout -- readme.txt
(1)当文件自修改后还没有被add到暂存区,则撤销修改就会使文件回到与版本库分支中的文件一模一样;
(2)当文件已经add到暂存区,又作了修改,则插销修改就会回到与暂存区中的文件一样;
注:此命令中的 -- 一定要有,如果没有 -- 就变成创建一个新的分支;
当修改已经add到暂存区,此时想要撤销修改时,就需要先将暂存区的修改回退到工作区,然后再工作区撤销修改;
命令:git reset HEAD <文件名>
git checkout -- <文件名>
如:git reset HEAD readme.txt
git checkout -- readme.txt
当已经提交到版本库,想撤销修改时,就需要进行版本回退。
10. 删除文件:
(1)若文件已经提交到版本库,从版本库中删除文件:git rm <文件名>
(2)若文件添加到暂存区,从暂存区中删除文件:git rm -f <文件名>
(3)若在工作区删除了文件,但文件已添加到暂存区或者提交到版本库中,在工作区中恢复文件:git checkout -- <文件名>
11. 创建SSH Key:ssh-keygen -t rsa -C "[email protected]"
生成.ssh文件,其中id_rsa为私钥,id_rsa.pub为公钥。
将id_rsa.pub中的公钥添加到gitHub.com中。
12. 将工程合并到github.com上:在github上创建项目,然后根据提示绑定;
首先,关联一个远程库:
git remote add origin http://github.com/Username/Projectname.git 或者 //此处的origin为一个别名,可以取其他名字。
git remote add origin [email protected]:path/repo-name.git
然后,推送到远程库中:git push -u origin master //第一次推送master中的所有内容;
此后,若本地版本修改之后,只需要通过git push origin master命令就可以合并到github.com中。
13. 将仓库项目克隆到本地:git clone [email protected]:path/repo-name.git
14. 创建分支
(1)创建分支:git checkout -b <分支名称>
其中,参数-b相当于两条命令:创建并切换:git branch <分支名称>,git checkout <分支名称>;
如:git checkout -b dev
可以在创建本地分支的同时,将远程分支的内容克隆(clone)到此分支:git checkout -b <本地分支名> <远程库名称>/<远程分支名称>,如:
git checkout -b dev origin/dev //创建本地分支dev的同时,将远程origin库中的dev分支克隆到本地dev分支中。
(2)查看当前分支:git branch //列出所有分支,并在当前分支前显示一个*;
(3)分支切换:git checkout <分支名称>//
(4)分支合并:git merge <分支名称> //将指定分支合并到当前分支上
(5)删除分支:git branch -d <分支名称> //删除指定分支//删除本地分支;
(6)删除远程分支:git push origin :<分支名称>//删除远程服务器上的分支,:代表删除分支;
15. 当Git无法合并时,需要先手动解决冲突,然后再提交,在合并;
查看分支合并图命令:git log --graph //多行显示提交记录
或者 git log --graph --pretty=oneline //单行显示合并及提交记录,但会显示每个记录id的全称
或者 git log --graph --pretty=oneline --abbrev-commit //单行显示,每个记录的Id只会显示一部分;
16. 分支管理
通常通过命令:git merge <分支名称>合并时,如果可能(比如没有冲突),Git会用Fast Forward模式,此种模式下,合并完成后,会丢失分支信息;
可以通过禁用Fast Forward模式,Git就会在merge时生成一个新的commit,这样就可以从分支历史记录中看到分支信息;
禁用Fast Forward模式的关键字为--no-ff,完整命令:
git merge --no-ff -m "说明" <分支名称> //因为要生成一个新的commit,所以用-m添加说明;
17. 分支策略
在实际开发中,应该按照以下几个原则进行分支管理:
(1)master分支应该是非常稳定的版本,也就是用来发布新版本,通常不在此分支开发;
(2)在dev分支上开发,将每个人的成果合并到dev上,然后通过dev合并到master上进行发布;
(3)每个人都有自己的分支,比如John,Sam等等,在自己的分支上开发,之后将其合并到dev分支上。
18. bug分支
(1)修复bug时通常在master中建一个临时分支,修复完成后,合并分支,然后将临时分支删除;
19. 任务现场“储存”操作
当工作进行到一半,需要立即处理其他事务,则可以通过任务现场“储存”操作将正在进行的工作暂时隐藏起来。
命令关键字为:stash
(1)git stash:备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区的内容保存到Git栈中。
(2)git stash pop:显示Git栈内的所有备份,恢复工作区的相关内容。由于可能存在多个stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复;
(3)git stash list:显示Git栈内所有备份,可以利用这个列表来决定从哪个地方恢复;
(4)git stash clear:清空Git栈。此时使用gitg等图形化工具会发现,原来stash的那些节点都会消失。
(5)git stash apply stash@{<标号>}:恢复Git栈中第<标号>所代表的内容;此命令不会从Git栈中删除此条存储信息。
若要删除,需要用git stash drop命令。
20. feature分支:
每添加一个功能,最好针对此功能新建一个分支,在分支上开发完成之后,在进行合并;
如果未合并时需要删除,则可以通过 git branch -D <分支名称> 强制删除;
21. 多人协作
(1)查看远程库名称:git remote 或者 git remote -v //可以显示更加详细的信息
git branch -a//查看本地和远程分支;
(2)推送分支:git push origin <分支名称> //此命令默认将当前分支推送到远程的master上:如:git push origin master
若要将本地master分支推送到远程的dev(远程已建立此分支),需要指定远程分支的名称,因为本地master分支默认指向origin master分支:git push origin master:<远程分支名称>,如:git push origin master:dev
本地除master分支,推送到远程分支时,直接使用git push origin <远程分支名> 即可。
(3)抓取分支:git pull
当有人对远程分支中的某一文件做了修改,并已完成推送,本地也对此文件做了修改,再推送时会推送失败。需要先将远程库中的文件pull(拉取)到本地,
然后在本地合并并解决冲突,再往远程推送。
git pull作用:取回远程主机某个分支的更新,在与本地的指定分支合并;
命令格式:git pull <远程主机名> <远程分支名>:<本地分支名>
如:git pull origin next:master //取回远程origin主机的next分支,与本地的master分支合并
当远程分支与当前分支合并,冒号后面的部分可以省略;
git pull先取回,在合并,相当于先git fetch,再做git merge:
(4)建立跟踪关系
Git可以自动在本地分支与远程分支之间,建立一种跟踪关系(tracking)。比如,在git cmaster分支lone时,所有本地分支默认与远程主机的同名分支,建立跟踪关系,也就是说,本地的master分支自动“追踪”origin/master分支。
Git也可以手动建立跟踪关系:git branch --set-upstream <本地分支名> <远程主机名>/<远程分支名>
如:git branch --set-upstream master origin/dev //指定本地master分支跟踪origin/dev分支。
如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名称:git pull origin
如果当前分支只有一个追踪分支,连远程主机名都可以省略:git pull //当前分支自动与唯一一个追踪分支合并;
如果合并采用rebase模式,可以使用-rebase选项:
git pull --rebase <远程主机名> <远程分支名>:<本地分支名>
22. 创建标签:
(1)创建命令:git tag <tagName>,如:git tag v1.0
查看所有标签:git tag
注:默认标签是创建在最新提交的commit上的,需要早前的 commit打标签时,可用用commit的ID来打标签:git tag <tagname> <ID>
(2)标签不是按照实际顺序列出而是按照字母排序。
git show <tagname> //查看标签信息;
(3)可以创建带有说明的标签,用-a指定标签名,-m指定说明文字。
如:git tag -a v0.1 -m "version 0.1 realeased"
通过-s用私钥签名一个标签,如:
git tag -s v0.2 -m "signed version 0.2"
23. 操作标签
(1)删除标签:git tag -d <tagname>;
(2)创建的标签存储在本地,不会自动推送到远程,要将某个标签推送到远程,可以使用命令:git push origin <tagname>
一次性推送所有标签:git push origin --tags
(3)删除远程标签:
先删除本地标签;
然后通过命令:git push origin :refs/tags/<tagname>
24. 忽略特殊文件:https://github.com/github/gitignore
25. 设置别名:git config --global alias.<别名> <命令名称>
如:git config --global alias.st status //将status设置为st
26. 配置文件:
(1)--global:针对当前用户起作用;如果不加,只针对当前的仓库起作用。