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~100git 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 rmgit commit -m1
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:一次性把暂存区的所有修改提交到分支
