forked from michaelliao/learngit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwgy352561072.txt
129 lines (87 loc) · 4.92 KB
/
wgy352561072.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
git仓库的创建
git init 初始化git仓库,自动创建master分支。
touch readme.md 创建readme文件.
git status 查看仓库当前文件的状态.
git add readme.md 如果添加的文件比较多,可以直接使用git add .
git commit -m "add readme file" 提交readme文件.
git版本回退
git log查看提交记录.
git reset --hard <commit_id> commit_id是由git自动生成的,通过git log命令获取.
假如从最新版本回退到了之前的版本,现在后悔了,要再回退到最新版本。但是git log命令已经获取不到.该commit_id,使用git reflog命令记录每一次的命令,可以找到需要的commit_id。
工作区和暂存区
工作区就是文件所在的文件夹,暂存区在隐藏文件夹.git中。
git add把文件从工作区添加到暂存区。
git commit把暂存区的所有文件提交到当前分支。
撤销修改
git checkout -- <file> 把文件在工作区的修改全部撤销
文件修改后还没添加到暂存区,撤销修改后,回到和仓库一样的状态;
文件修改后已添加到暂存区,之后又作了修改,撤销修改后,回到和暂存区一样的状态。
git reset HEAD <file>把已经添加到暂存区的修改撤销掉,重新放回工作区。
连接远程仓库
1、生成SSH key
2、比如在gitlab上,上传自己的SSH Key
3、新建仓库(repository),按照页面提示,使用
git remote add origin ssh://xxxxx.com/xx/demo.git命令,将本地与远程仓库关联。
git push -u origin master把本地代码推送到远程库上。
4、由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
git pull origin master
git push origin master
分支创建和合并
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
解决冲突
使用git merge后,可能会出现冲突。
先解决冲突,再使用git add git commit命令进行提交。
储藏
git stash save <message> 将修改储藏起来。
默认情况下,会储藏以下文件:
添加到暂存区的修改(staged changes)
git跟踪单并未添加到暂存区的修改(unstaged changes)
不储藏以下文件:
在工作区中的新文件(untracked files)
被忽略的文件(ignored files)
git stash save -u <message> 可以 stash untracked files
git stash save -a <message> 可以 stash 当前目录下所有修改
git stash list 储藏的列表。
git stash apply将储藏的内容恢复,stash中内容并不删除,使用git stash drop来删除。
git stash pop将储藏的内容回访,同时删除stash中内容。
git stash apply stash@{0}储藏列表中存在多个stash,恢复指定的stash。
实际开发
每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
在dev分支新建一个feature/play_music分支:
git checkout -b feature/play_music
touch play_music.js
git add play_music.txt
git commit -m 'Add play music'
git checkout dev
git merge feature/play_music
git branch -d feature/play_music // 非必须进行的一步
如果删除一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
多人开发
在向远端推送前,先使用git pull origin <branch-name>拉取对应分支最新的代码
再使用git push origin <branch-name>推送到远端
如遇冲突,解决冲突后,在进行操作
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to=origin/<branch-name> <branch-name> 。
rebase 变基
TODO
tag 标签
git tag <name>默认标签会打在最新提交的commit上。
git tag 查看所有的标签。
若需要在之前的commit上打tag, 先使用git log --pretty=oneline --abbrev-commit找到历史提交的commit id,然后git tag <name> <commit-id>。
标签不是按时间顺序列出,而是按字母排序的。
可以用git show <tagname>查看标签信息。
创建tag时,也可以添加说明,用-a指定标签名,-m指定说明文字:
git tag -a <name> -m <message> <commit-id>
标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。
git tag -d <name> 删除指定标签。
git push origin <tag-name> 单个推送标签到远程
创建的标签都只存储在本地,不会自动推送到远程。
git push origin --tags一次性推送全部尚未推送到远程的本地标签。
删除远程标签的话,先从本地删除:
git tag -d <name>
然后从远程删除:
git push origin :refs/tags/<name>