结合他人blog或视频以及自己平时使用git的一些经验写成的一篇实用向git手册。
参考视频:十分钟速通git核心指令
博主分支部分有些错误,在本文已修正。
基础环境配置参见:Arch配置Git自动登录验证
拉取远程仓库并合并
git fetch,git merge,git pull
git fetch命令拉取远程仓库最新代码,git merge执行合并。git pull拉取并自动合并。注意,git merge时可能会有merge conflict。为了避免合并时的冲突,可以先git fetch再git merge合并,这样根据IDE的报错修改特定冲突部分。
状态查询
git log,git status
git log用来查看所有提交,git status用来查看本地文件夹的状态,git diff用来对比不同分支/提交的文件差异。
分支
git branch
1 | git checkout -b new_branch |
通过以上命令在本地新建分支new_branch,该分支中文件在当前分支的基础上进行,同时自动进入new_branch分支。
1 | git branch -vv |
查看本地所有branch以及其与远程branch的绑定
进行一定开发后add,commit………然后:
1 | git push -u origin new_branch |
将本地new_branch分支推送到远程new_branch,此时在远程新建了new_branch分支,并使用-u参数记住了该本地分支下次git push/git pull时需要推送/拉取的远程分支。
1 | git switch main |
本地切换到main分支。
1 | git fetch origin new_branch |
拉取远程的new_branch分支。
1 | git merge origin/new_branch |
合并本地main分支和远程new_branch分支
1 | git push origin |
将本地main分支的修改推送到远程仓库
解决冲突
git的文件冲突解决方式比较智能,有时会因为错误的合并策略导致再次合并时不能重新合并,这是因为已经检测到合并过了,此时对要并入的文件略微添加注释即可重新合并。这是因为合并时会根据文件内容,合并历史,文件历史综合考虑合并策略。
合并时提示有冲突可以使用mergetool解决冲突。
1 | git mergetool filename |
若不加文件名,自动打开冲突文件
vimdiff使用
配置:
1 | git config --global merge.tool vimdiff |
键入以下命令启动
1 | git mergetool |
上面三个窗口分别是本地文件(LOCAL),共同上游(BASE),远程文件(REMOTE)。下面的窗口为MERGED窗口(即合并后的窗口/有冲突的窗口)
光标标移动到MERGED窗口,以下命令可以获取上面窗口的内容(也可根据个人需求自行修改MERGED窗口内容)
1 | :diffget REMOTE # 获取REMOTE的修改到MERGED文件, 忽略大小写 |
上面这张图片键入命令无效,要求有一条白线(没有白线可以换成输入模式输入点内容自动白线),如下:
还有一些其他命令
1 | ]c # nect difference |
解决冲突完成后git comit提交即可。
fork
项目复制
在github上fork别人的远程仓库之后,相当于你自己新建了一个自己的远程仓库,只不过内容都是别人的远程仓库里的内容。你可以对自己fork到的仓库进行任意操作。例如,git clone到本地后,进行若干修改/提交,git push到的远程仓库为你的远程仓库。如果想让代码合并到原作者的远程仓库,需要向原作者申请Pull requests,原作者同意后即可合并到原作者的远程仓库。这即为开源项目的贡献流程。