Git学习笔记
学习笔记用来帮助自己记忆,而不是帮助别人学习.
初次运行git前的配置
配置文件所在位置
- 系统配置:
/etc/gitconfig
- 当前用户配置:
~/.gitconfig
或~/.config/git/config
- 当前仓库配置:
.get/config
基础命令
-
查看所有配置文件所在位置:
$ gitconfig --list --show-origin
-
修改用户名和地址:
$ git config --global user.name "John Doe" $ git config --global user.email 1045723308@qq.com
-
设置编辑器(比如vim、emacs等):
$ git config --global cor.editor "emacs"
-
查看配置信息
$ git config --list
-
查看某一项配置(比如user.name)
$ git config --liset user.name
分支的用法
分支操作的适用场景
开发一个项目时,需要将项目分工,所有人一起做一个一个项目,所以上传到同一个远端仓库.
这时候就有问题了,比如支付宝项目,假如小明时写前端的代码,他把自己的代码写好后,push
(推到)远端仓库,会把别人写的后端代码覆盖吗? 这个时候就会出现报错.
为了解决这个问题,就得用分支功能,也就是一个远端仓库出现很多暂时互不干涉的小仓库.最后做完了再将它们merge
(合并).
分支的基本概念
一个仓库可以有很多分支,而且分支的名字都是自己取的,但是有一个master
分支是仓库初始化的时候给的,这个就是我们所说的主分支.
分支的基本操作
- 查看本地分支:
git branch
- 查看所有分支:
git branch -a
- 创建分支:
git branch 分支名
- 切换分支:
git checkout 分支名
- 合并分支:
git merge 分支名A
: 将分支A合并到主分支master
. - 删除分支:
git branch -d 分支名
- 推送分支到远端:
git push -u origin 分支名
- 克隆固定分支:
git clone -b 分支名 远端地址
分支的管理
-
查看所有分支最后一次提交:
$ git branch -v
-
查看已经合并的分支和为合并的分支
查看已经合并到当前分支的分支(包括自己) $ git branch --merged 查看未合并到当前分支的分支 $ git branch --no-merged
冲突产生与解决
-
冲突产生的原因
假设小明和小红同时更改了同一个分支的文件,然后小明先
push
没有问题,但是小红再push
就报错了,为啥呢?想都想的到呀. -
解决冲突
先输入命令:
git pull
,然后有冲突的文件就会把别人的更改和自己的更改都写出来,可以同时保留更改,也可以和把别人的更改撤销.当然,最好和别人商量一下.
-
建议
上班先
git pull
,可以有效的避免冲突. 但是遇到冲突也不要怕,按步骤处理即可.
本地创建仓库如何与远端仓库合并?
这个问题困扰了我很久,因为本地仓库和远端仓库没有公共祖先所以直接pull会出现问题.
并且由于我一直对分支了解不太透彻,导致越来越晕.
概念梳理
-
分支分为本地分支和远端分支,通过
$git branch -a
可以看到所有分支. -
本地分支需要与远端分支关联才能pull和push
-
关联之后本地会出现一个和远端同名的分支,这个分支就是合并之后的分支
比如
git pull origin master --allow-unrelated-histories
就是将远端的master 和本地当前分支合并,合并成功后,本地就会出现一个master分支(本来就有,我还不知道会发生什么)
情景分类
- 文件在远端仓库,本地仓库是空的
- 文件在本地仓库,远端仓库时空的
- 本地和远端都有文件
解决上述问题
第一种最好解决,直接 git clone
即可. 直接讲第三种吧,因为第二种是一个子问题.
将远端的master与当前分支合并(这里记得切换到想要合并的分支) ,后面一串意思是允许两个分支没有公共祖先,就是毫无关系. 下面的master 可以改成你想要的远端分支.
$git pull origin master --allow-unrelated-histories
好像这样就可以了,总感觉有什么没写,下次想到再补上吧.