Git🎈
基本命令
1 | # 建立repo |
忽略某些文件
有时候不需要把某些文件纳入版本控制中
在repo文件夹下建立 “.gitignore” 文件,此文件有如下规则:
- 忽略文件中的空行、以井号(#)开始的行也会被忽略
- 可以使用 Linux 通配符。例如:星号(*)代表任意多个字符,问好(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1, string2,······})代表可选的字符串
- 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
- 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不
- 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
注意:gitignore 对已经 git add & commit 的文件和文件夹不起作用!
1 | # 为注释 |
配置SSH公钥以及创建repo
创建repo时,可选许可证:
- 开源可以随意转载
- 开源但不可商用
- 等等
Git 分支
常用分支命令
1 | # 列出所有本地分支 |
如果同一个文件在合并时都被修改了,则会引起冲突。解决办法是修改冲突文件后重新提交,选择保留它的代码还是你的代码!
简言之,如果冲突了就需要协商
Git 分支管理💥
文件添加、移除的操作
- 当前文件夹下:git.md、本地分支:main,远程分支:origin/main
![](1.png)
新建分支:dev,添加文件 dev.txt,并将其 add & commit
在 dev 分支下,有文件:dev.txt & figures & git.md
但是在 main 分支下,看不到 dev.txt
![](2.png)
![image-20211227125139440](3.png)
合并分支:将 main 和 dev 合并!
git merge [branch name]
在 main 分支中,可以看到 dev.txt
![](4.png)
- 删除分支:将 dev 分支删除
![](5.png)
合并冲突👏
合并并不仅仅是简单的文件添加、移除的操作,Git 也会合并修改。
简单的冲突
简单的冲突是指, bugFix 基于 main 建立后,main 不会进行提交,而是只在 bugFix分支提交!
然后 main 要 merge bugFix 时,Git 会自动帮你完成 merge
以内容添加为例
- 往 dev.txt 中覆盖写入 “main:develop file!”,并查看
![](6.png)
新建分支 bugFix,并在 dev.txt 中追加写入:”bugFix:fix some bugs!”
add & commit the changes
![](8.png)
- 在 main 和 bugFix 中查看 dev.txt
![](9.png)
合并两个分支
使用 git merge bugFix 后,会弹出一个 vim界面,在其中写入为何要 merge
![](10.png)
![](vim1.png)
![](11.png)
内容删减和修改就不再展示了
复杂的冲突
如果 bugFix 基于 main 建立之后, bugFix 进行了一次 commit,main 也进行了一次 commit!
这个时候如果 main 要 merge bugFix,Git 会向你报错:Automatic merge failed; fix conflicts and then commit the result.
这代表 Git 无法像前面那样自动 merge bugFix,因为现在的 main 已经提交一(好多次)次了!
- 在 bugFix 中修改 dev.txt,add & commit
![](16.png)
- 回到 main 中,修改 dev.txt,add & commit
![](17.png)
main 要 merge bugFix,出现报错!
Git 无法自动合并,这时我们要手动修改代码!
而且注意 branch 的状态:(main|MERGING) 这说明 main 正在(等待)合并(改错)!
![](18.png)
打开dev.txt:vim dev.txt,查看内容如下:
可以发现,Git 已经提示了冲突的位置!
<<<<<<<HEAD 与 “====” 之间的是 main 中的 changes
“====” 与 >>>>>>bugFix 之间的是 bugFix 中的 changes
我们可以依据实际的 API 改变情况进行修改!如下
![](vim2.png)
![](19.png)
之后,可以用 git add 要告诉 Git 文件冲突已经解决
注意:branch 的状态由 (main|MERGING) 变为了 main,说明 merge 完成!
查看 dev.txt 内容:已经变成了我修改(协商)后的内容
![](20.png)
![](21.png)
- 对于 bugFix 分支,这时可以删除了!
![](22.png)