理论基础
git中记录的是什么?
到了版本4,总共存储了8个文件。版本2中File1, File2文件更改了,所以又存储了这两个新的文件(旧的文件当然也保存了),这样就为版本控制产生了方便。
实战
我在github上又创建了一个github账号,用的是学校邮箱,username是zhouhuahui2。以前用qq邮箱创建了一个username为zhouhuahui 的账号。
初始化git
当创建好github账户后,这样就可以在自己的电脑中创建一个文件夹,用来管理自己的该账户下的repository。
1  | git remote add origin https://github.com/zhouhuahui2/test_repo1.git  | 
- 创建GitRep2文件夹
 进入该文件夹,打开git bash
1  | git config --global user.name 'zhouhuahui2' #设置用户名  | 
1
2
3
4
5#创建一个文件test1.txt,上传至远程库
<手动创建一个文件>
git add --all
git commit -m "update"
git push -u origin master
permission denied
这个原因是在windows操作系统中登入的是zhouhuahui的账号,而不是zhouhuahui2的。
branch分支操作
1  | git branch <branch_name> #创建分支  | 
1  | git branch #查看分支  | 
1  | git checkout <branch_name>  | 
1  | git branch -d <branch_name> #删除分支  | 
add
1  | git add -r --cached build # 删除add错的文件夹  | 
pull
git pull命令的作用是:取回远程主机某个分支的更新,再与本地的指定分支合并。
1  | git pull <远程主机名> <远程分支名>:<本地分支名>  | 
未产生冲突的pull
创建了一个zhouhuahui/test1项目,只有README.md文件
1  | # test1  | 
然后copy到本地
接着,更新远程的README.md文件
1  | # test1  | 
在本地test1项目下创建一个新的分支:git branch branch1
pull到branch1:git pull origin master:branch1
1  | # test1  | 
如何解决冲突
参考 https://www.cnblogs.com/zjfjava/p/10280247.html
status
git status查看当前状态
log
git log查看历史版本号
reset
git reset [--hard] {历史版本号},可以回退到某个版本。有以下几个情况要考虑:
- 假如你add了一些文件,但是后悔了,此时可以通过
git reset HEAD来取消add的文件。因为你只是add了,但是并没有commit,因此没有产生新的版本号,只需用HEAD版本,也就是当前版本,就可以将add的文件取消。 - 假如你commit了,那么在本地就会产生一个新的版本号,此时你要回退到上一个版本,就要用
git reset HEAD^。如果要回退很久之前的把呢不能,那么使用git log查看版本号。 - 假如你不仅要让本地回退,还要让工作区回退,那么就很严格了,因为工作区一旦回退,就没法撤销,也就是你电脑文件中的文件所做的更改都没了。
git reset --hard HEAD^,本地仓库和工作区都回退到上一个版本。 
例如:我有一个文件README.md
1  | # test1  | 
先更改为:
1  | # test1  | 
然后直接add: git add  README.md。
git  status:

执行:git reset HEAD,撤销之前的add

如果执行:git add README.md和git commit -m "none"。接着要想本地仓库会退,就要用: git reset HEAD^。此时本地仓库确实回退了,但是工作区的代码仍然是:

使用git log,得到HEAD的版本号是02fd64957ec40f65d3c0ce347bba96d0cd40ac89
因此,可以通过:git reset --hard 02fd64957ec40f65d3c0ce347bba96d0cd40ac89来回退工作区:

参考资料:https://blog.csdn.net/chenpuzhen/article/details/92006378
如何处理接受到的pr
在自己的本地仓库创建一个branch_test,假如要merge的分支是branch1(有可能是master)
1
2git branch branch_test
git checkout branch_test从提交pr的用户(zhouhuahui)的远端拉取代码
1
git pull git://github.com/zhouhuahui/test_rep1.git master
解决冲突
切换到branch1,并且merge branch_test
上传到远程的branch1
git clone远程仓库的多个分支
git clone 默认是克隆Head指向的master分支,如果是多分支,如果是多分支,我们该如何做呢?
1  | git clone https://github.com/zhouhuahui/MiniOB.git  | 
此时,发现输出是:
1  | * master  | 
然后我们可以clone所有分支:
1  | git checkout -b featrue_org origin/feature_org  | 
git设置代理
参考 git如何设置使用代理 - 简书 (jianshu.com)
添加和删除git全局配置
参考 添加和删除git全局配置(git config —global)_wang的博客-CSDN博客
使用git生成patch
git format-patch {base commit id}..{latest commit id}
问题
fatal: refusing to merge unrelated histories
这是在git pull时遇到的,可以这样解决:
1  | git pull origin main --allow-unrelated-histories  | 
如何编辑冲突
在git pull时肯定会遇到conflict,这时需要我们看哪些文件conflict了。比如:

通过git status也可以查询到。
然后打开对应的文件,会看到类似于这样的内容:
1  | a123  | 
其中:冲突标记<<<<<<< (7个<)与=======之间的内容是我的修改,=======与>>>>>>>之间的内容是别人的修改。最简单的编辑冲突的办法,就是直接编辑冲突了的文件,把冲突标记删掉,把冲突解决正确。