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