Git入门
Git入门
Reference
基本操作
初始化git仓库
git init
注意只有在git目录下有效。
1 |
|
文件放入git仓库
git add <file>
,可反复多次使用,添加多个文件;
git commit -m <message>
1 |
|
查看工作区状态
git status
查看文件修改内容
git diff
1 |
|
版本回退
HEAD
指向的版本就是当前版本,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,可以写成HEAD~100
git log
查看提交历史1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18$ git log
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 21:06:15 2018 +0800
append GPL
commit e475afc93c209a690c39c13a46716e8fa000c366
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 21:03:36 2018 +0800
add distributed
commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 20:59:18 2018 +0800
wrote a readme file加上
--pretty=oneline
参数进行简化1
2
3
4$ git log --pretty=oneline
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
e475afc93c209a690c39c13a46716e8fa000c366 add distributed
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme filegit reflog
查看命令历史
1
2
3
4
5$ git reflog
e475afc HEAD@{1}: reset: moving to HEAD^
1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
e475afc HEAD@{3}: commit: add distributed
eaadf4e HEAD@{4}: commit (initial): wrote a readme filegit reset --hard commit_id
回退到指定版本,
commit_id
可以通过git log
查询。1
2$ git reset --hard 1094a
HEAD is now at 83b0afe append GPL特殊地,
$ git reset --hard HEAD^
可以回到上一个版本。1
2$ git reset --hard HEAD^
HEAD is now at e475afc add distributed撤销
撤销修改
想直接丢弃工作区的修改时,用命令
git checkout -- file
。git checkout
其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。1
2
3
4
5$ git checkout -- readme.txt
$ git status
On branch master
nothing to commit, working tree clean改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改
第一步用命令
git reset HEAD <file>
,就回到了场景1,第二步按场景1操作。1
2
3$ git reset HEAD readme.txt
Unstaged changes after reset:
M readme.txt已经提交了不合适的修改到版本库时,想要撤销本次提交
版本回退
删除文件
删除文件后:
确实希望删除
git rm
git commit -m
1
2
3
4
5
6
7$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
[master d46f35e] remove test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt误删,希望恢复
1
$ git checkout -- test.txt
远程库连接
push
新建仓库后,看到页面:
按照github的提示:
1 |
|
此后提交文件只需要:
1 |
|
解除和远程库关系
用git remote -v
查看远程库信息:
1 |
|
然后,根据名字删除,比如删除origin
:
1 |
|
此处的“删除”其实是解除了本地和远程的绑定关系,并不是物理上删除了远程库,远程库本身并没有任何改动。
要真正删除远程库,需要登录到GitHub,在后台页面找到删除按钮再删除。
克隆
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone
命令克隆。
Git支持多种协议,包括https
,但ssh
协议速度最快。
1 |
|
这部分如果出现拒绝访问等错误可以尝试:
重启git bash
查看ssh是否有问题
(参考:https://www.liaoxuefeng.com/wiki/896043488029600/896954117292416)
2022-8-2 学到分支管理
分支管理
简单图示
初始状态
创建新分支
dev分支下添加内容
合并
删除dev分支
基本操作
查看分支:git branch
创建分支:git branch <name>
切换分支:git switch <name>
(git checkout <name>
)
创建+切换分支:git switch -c <name>
(git checkout -b <name>
)
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
分支合并图:git log --graph
查看远程仓库信息:
git remote -v
显示更详细的信息:
1 |
|
显示了可以抓取和推送的origin
的地址
冲突
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
示例:
创建新分支feature1,提交相应修改;然后切换到main分支,提交修改:
此时无法直接合并,产生冲突。
解决冲突需要将文件修改后保存,此时分支示意图:
最后删除feature1分支即完成。
管理策略
首先,master
分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
dev
分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev
分支合并到master
上,在master
分支发布1.0版本;
你和你的小伙伴们每个人都在dev
分支上干活,每个人都有自己的分支,时不时地往dev
分支上合并就可以了。
所以,团队合作的分支看起来就像这样:
合并分支时,加上--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward
合并就看不出来曾经做过合并。
bug分支【没看懂】
feature分支
开发一个新feature,最好新建一个分支。
如果要丢弃一个没有被合并过的分支(即执行过了git commit
但是还没git merge
),可以通过git branch -D <name>
强行删除。
push
推送时指定本地分支:(main 为例)
1 |
|
2022-8-3 学到标签管理
零碎知识点
版本控制系统只能跟踪文本文件
- 只能跟踪纯文本文件的改动
- word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的
- windows下采用记事本编辑文件会出问题,应该采用vscode
工作区和暂存区
- 工作区
- 暂存区
工作区的隐藏目录.git
是git的版本库,其中有暂存区(stage)
git add
:把要提交的所有修改放到暂存区
git commit
:一次性把暂存区的所有修改提交到分支