0%

git手册

结合他人blog或视频以及自己平时使用git的一些经验写成的一篇实用向git手册。

参考视频:十分钟速通git核心指令

博主分支部分有些错误,在本文已修正。

基础环境配置参见:Arch配置Git自动登录验证

拉取远程仓库并合并

git fetch,git merge,git pull

git fetch命令拉取远程仓库最新代码,git merge执行合并。git pull拉取并自动合并。注意,git merge时可能会有merge conflict。为了避免合并时的冲突,可以先git fetchgit 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
2
3
4
5
6
git config --global merge.tool vimdiff
git config --global merge.conflictstyle diff3
git config --global mergetool.prompt false

#让git mergetool不再生成备份文件(*.orig)
git config --global mergetool.keepBackup false

键入以下命令启动

1
git mergetool

上面三个窗口分别是本地文件(LOCAL),共同上游(BASE),远程文件(REMOTE)。下面的窗口为MERGED窗口(即合并后的窗口/有冲突的窗口)

光标标移动到MERGED窗口,以下命令可以获取上面窗口的内容(也可根据个人需求自行修改MERGED窗口内容)

1
2
3
4
:diffget REMOTE # 获取REMOTE的修改到MERGED文件, 忽略大小写
:diffg REMOTE # 获取REMOTE的修改到MERGED文件, 忽略大小写
:diffg BASE # get from base
:diffg LOCAL # get from local

上面这张图片键入命令无效,要求有一条白线(没有白线可以换成输入模式输入点内容自动白线),如下:

还有一些其他命令

1
2
3
4
5
6
7
8
9
]c      # nect difference
[c # previous difference
zo # open folded text
zc # close folded text
zr # open all folds
zm # close all folds
:diffupdate # re-scan the file for difference
do # diff obtain
dp # diff put

解决冲突完成后git comit提交即可。

fork

项目复制

githubfork别人的远程仓库之后,相当于你自己新建了一个自己的远程仓库,只不过内容都是别人的远程仓库里的内容。你可以对自己fork到的仓库进行任意操作。例如,git clone到本地后,进行若干修改/提交,git push到的远程仓库为你的远程仓库。如果想让代码合并到原作者的远程仓库,需要向原作者申请Pull requests,原作者同意后即可合并到原作者的远程仓库。这即为开源项目的贡献流程。