Git的学习笔记
1、简介:
git是一款免费、开源的分布式版本控制系统
2、特点:
Git是一个开源的分布式版本控制系统,可以有效,高速的处理从很小到非常大的项目版本管理
3、安装Git
执行下面命令
sudo apt-get install git
4、Git基础配置
安装好Git后,我们还要进行一些基础的配置才能使用Git
-
配置用户名
git config --global user.name “laixxx”
-
配置邮箱
git config --global user.email "laixxx@example.com"
-
编码配置(避免git gui、git status中的中文乱码)
git config --global gui.encoding utf-8 git config --global core.quotepath off
-
配置完了可以使用命令查看你的配置信息
git config --list
5、Git配置SHH(与Gitlab进行加密传输,更加可靠,也可以不用每次pull和push时输密码)
-
在Linux的命令行下输入以下命令:
ssh-keygen -t rsa -C “laixxx@example.com”
-
然后多次进行回车,不要输入,生成SHH Key
-
查看公钥,复制并粘贴到gitlab的SHH Key中,随便输入title,然后点击Add Key
cat ~/.ssh/id_rsa.pub
6、Git的基本使用
配置好Git后就是Git使用了
1、与远程仓库连接
通过 git init和 git remote add 远程仓库名称 远程仓库URL实现
1. 先在指定位置创建文件夹,我在/home/meizu/AndroidStudioProjects
2. 初始化仓库,进入到新创建的文件夹下运行git init
3. 此时,该文件下会多一个.git文件夹,里面有config、object、refs、HEAD 等文件
4. 然后执行 git remote add origin git@gitlab.meizu.com:lulingpao/CameraDemo.git
5. 此时这个本地仓库就与远程仓库连接了,我们可以进行git status、git add、git commit、git pull、git push操作了
通过 git clone 实现
1. 进入一个新目录,我是进入/home/meizu/AndroidStudioProjects
2. 然后执行 git clone git@gitlab.meizu.com:lulingpao/CameraDemo.git
3. 执行完后,会在新目录下创建一个本地仓库并且与远程仓库连接好了
4. 我们可以进行git status、git add、git commit、git pull、git push操作
2、Git使用的基本流程
-
1.git status
- 查看当前仓库是否有未提交的修改文件
- 一般是先执行git status,再执行 git add,这个是使用规范
-
2.git add —>暂存区
- git add . 是将当前目录下的所有修改的文件提交到暂存区
- git add 文件名或目录 是将指定文件或目录提交到暂存区
- git add 只能提交工作区中的文件到暂存区,也就是仓库里的文件
-
3.git commit —>本地仓库
- git commit 将暂存区里的数据提交到本地仓库,并且会打开一个编辑窗口,输入提交信息保存即可
- git commit -m “xxx”与git commit 的区别就是git commit -m是不会打开一个窗口的
-
4.git pull origin laixxx/study
- 从远程仓库拉取最新的项目到本地仓库
- 一般先执行git pull再执行git push,这也是使用规范,因为你不能保证你本地仓库里的项目与远程仓库的项目是同步的,所以要先执行git pull 再执行 git push,避免了直接git push发生错误,比如远程仓库有一个新的提交,你本地仓库没有执行git pull而是直接执行git push,由于你本地远程分支与远程仓库的分支已经不同步了,再执行git push就会报错
- 当然在进行git pull时可能会产生冲突,此时往往是因为远程仓库的修改和你本地仓库的修改被Git认为是同一条修改记录,Git不知道要保留谁的修改,此时就需要手动去解决冲突,可以执行 git status 查看冲突位置,然后进行线下沟通,最后解决
-
5.git push -u origin laixxx/study —> 远程仓库
- 将本地 laixxx/study 分支推送到远程仓库,origin是远程仓库默认名称,-u 是将本地仓库项目推送到远程仓库并关联起来
-
6.git merge laixxx/study
- 合并分支,将laixxx/study分支合并到当前分支来
3、Git常用命令总结
创建分支
创建分支
git branch 分支名
创建并切换分支
git checkout -b laixxx/study
这条命令和下面两条命令效果相同。
创建分支
git branch laixxx/study
切换分支
git checkout laixxx/study
删除分支
git branch -d laixxx/study
git branch reflog 可以查看所有分支的散列值
找到删除分支的散列值,然后使用git branch <分支名称> <散列值>,即可恢复已删除分支
查看分支
git branch (查看到本地仓库的所有分支)
git branch -a (该命令会查看到本地仓库和远程仓库的所有分支)
切换分支
git checkout 分支名
合并分支
git checkout master 先切换到master分支
git merge laixxx/study 再将 laixxx/study 分支的代码合并到当前分支
关联远程仓库
git remote add origin 远程仓库URL
查看远程仓库是否添加进来
git remote -v
拉取远程仓库所有分支
git fetch -a (只是拉取,并没有拉到你的磁盘里,当你执行 git merge 时才会真正拉到你的电脑磁盘里,就类似于下载这一操作,仅仅只是操作,并还没有下载下来)
单一拉取
git fetch origin laixxx/study
切换远程分支
git checkout -b laixxx/study (如本地没有该分支会自动创建该分支)
将本地分支关联到远程仓库分支
如果本地新建了一个分支 branch_name,但是在远程没有。使用
git push --set-upstream origin 分支名
如果远程新建了一个分支,本地没有该分支。使用
git checkout --track origin/分支名
复制指定分支到当前分支下
git cherry-pick 哈希值1 哈希值2
储藏当前工作
git stash
将当前分支拷贝一个副本继承 laixxx/study 分支
git rebase laixxx/study
git rebase -i HEAD~2 (将当前分支前2个分支(包含了当前分支)拷贝一份副本继承第前3个分支,执行这个命令时会弹窗,在窗口里我们可以对分支进行选择,进行排序等)
回退到上一个版本
git reset --hard HEAD^ (回退到当前分支上一个版本)
git reset --hard HEAD~2 (回退到当前分支前2个父级)
查看提交记录
git log (提交记录会显示每次提交的哈希值,通过git reset --hard 哈希值可以回到那个提交版本)
冲突的解决方式
对git pull --rebase的理解,在更新远程仓库代码的同时如果与本地仓库代码产生冲突了,那么冲突的地方就出现了需要手动合并的部分,而git pull --rebase不同的地方则是当有这些冲突存在时,git帮我们自动创建了一个新的分支,并且git告诉你接下来你要在这个新的分支上处理这个冲突,此时执行git status命令后可以看到提示
1. git add .
2. git commit -m “…”
3. git push时因为本地仓库代码与远程仓代码有冲突,所以接下来
4. git pull拉取远程代码,而冲突需要手动解决
5. 解决好后重新进行git add . git commit -m"…" git push
而git pull 这一步如果加上了–rebase的选项,那么第5步操作将变成如下
1.git add .
2.git rebase --continue
3.git push
所以git pull --rebase的作用就是在合并代码的时候随机创建一个分支并在该分支上处理冲突
对Change-Id的认识
类似于Map里的key,用来作为提交记录的唯一标识,方便管理人员对我们的提交进行管理,比如快速查找,当然这只是其次,主要的作用还是保证已经提交审核的修订通过审核入库后,被别的分支 cherry-pick 后再推送至服务器时不会产生新的重复的评审任务。就是避免进行重复的评审
对生成patch并应用的理解
首先要明白的是,为什么要生成patch,由于我们开发的产品难免会有极少数BUG被遗露的,一旦被发现就需要修复,但是这个BUG在很多分支上都存在,一个一个分支的去修改不现实,所以我们需要生成patch,相当于是一个补丁,生成以后然后把它应用到每个分支上即可
一. 生成patch
1. 假设在laixxx开发分支上我们需要修复一个BUG,这个BUG在其他分支上也存在,那么我们首先要新建一个分支 fix_laixxx_bug
git checkout -b fix_laixxx_bug (创建并切换)
2. 解决好bug后,生成相应的patch
git format-patch ansys --stdout > fix_laixxx_bug .patch
这条命令会为 fix_laixxx_bug 分支上所有相对于 laixxx 分支的修改生成一个 patch 文件
二. 应用patch
1. 切换到需要应用 patch 的分支
git checkout laixxx (用switch切换也可以)
2. 查看patch基本信息
git apply --stat fix_laixxx_bug .patch
3. 查看patch是否可以应用
git apply --check fix_laixxx_bug .patch
4.应用patch
git am --signoff < fix_laixxx_bug .patch
7、参考资料
菜鸟教程:https://www.runoob.com/
Git闯关学习:https://learngitbranching.js.org/?locale=zh_CN