git的学习和使用
一、环境配置
1. 下载git
(1)打开git bash
(2)设置签名
(因为提交代码的时候需要显示个人信息,谁提交的)
git config --globla user.name zou
git config --global user.email zou@qq.com
设置好了之后可以查看
(3)git在本地的结构和代码托管中心
本地库与远程库
2. 常用命令
(0)放弃工作区的修改
git restore src/
(0.1)放弃暂存区的修改,工作区保留
git restore --staged src/
(1)查看状态命令git status
(2)工作区提交到暂存区
git add good.txt
(3)从暂存区移出
git rm --cached good.txt //删除单个文件
git rm -r --cached node_modules/ //删除文件夹下的所有文件
//-r 参数的意思是允许递归删除
(4)暂存区提交到本地库
git commit good.txt
//会报一个警告,自动把行末换行字符从LF转换成CRLF
//然后会进入vim编辑器,切换insert模式,然后往第一行输入message,就会备注本次提交的信息
//或者用这个命令可以不进入编辑器,直接输入好备注信息
git commit -m "My first commit" goot.txt
4.1如果commit了一次但是没有push,继续修改好了之后,又想要comiit到本地库但是不想产生两次commit记录,就可以用这个命令,将本次修改内容放到上次commit的记录里面(其实是替换了上次提交)。
//本次的third commit就会放入到second commit的记录中去,
//并且message为third commit
git commit --amend -m "third commit "
(5)从暂存区的同步到工作区
git checkout -- good.txt //就是抛弃工作区的修改,换回暂存区的内容
(6)查看提交的历史信息
git log //多页的话,空格向下翻页,b向上翻页,q退出
git log --pretty=oneline
或者git log --oneline
或者git reflog //可以查看回退版本,指针需要退多少个版本,显示的第一个是索引值
(7)版本前进后退
- 基于索引值操作**【推荐】**
- 使用^符号(只能后退)
- 使用~符号(只能后退)
1.基于索引
git reflog
git reset --hard 索引值
2.使用^符号
git reset --hard HEAD^ //或者git reset --hard HEAD^^^
3.使用~符号
git reset --hard HEAD~n
(8)reset命令的三个参数对比
– soft参数
仅仅在本地库移动HEAD指针
– mixed参数
在本地库移动指针
重置暂存区
– hard 参数
在本地库移动指针
重置暂存区
重置工作区
(9)删除的文件找回
前提:删除前,文件存在时的状态提交到了本地库
操作:
git reset --hard HEAD 历史记录
(10)比较文件
当工作区的某个文件修改了,想跟暂存区的对比一下,看看修改内容
git diff 文件名 //与暂存区的比较
git diff HEAD 文件名 //与本地库的比较
3. 分支管理(超重要)
(1)分支概述
(2)分支操作
git status //查看当前所在分支
git branch -v //查看有哪些分支
git branch dev //创建分支
git checkout dev //切换分支
=====================================
合并分支(最重要的来了来了!!)
//有两个分支,一个master,一个dev。两个本地库版本还是一致的,当我在dev的工作区修改了文件,想要同步给master。
//此时,首先需要将dev工作区的修改先add到暂存区,再commit到本地库,这样才有这条版本更新的记录
第一步:切换到master分支(接收修改的分支上) git checkout master
第二步:执行merge命令 git merge dev
(3)解决冲突
当前在hot_mix分支下,修改了good.txt文件的某一行并且提交commit到本地库。
然后在master下,也修改了good,txt文化的同一行并且提交到了本地库。
切换到hot_mix分支,想将master的内容合并过来。
会提示自动合并失败,开始手动解决冲突,完成合并。
这时候就需要vim到good.txt里面,手动解决冲突
解决的方式是将<<<<<<<<<<<<<<HEAD、========、>>>>>>>>>>master这三行删掉,然后看保留哪一分支的内容,保存退出:wq
然后用git add good.txt提交到暂存区,解决冲突
再用git commit -m “resolve confilict” 完成合并 (注意不能写文件名了)
(4)遇到冲突后,需要取消本次合并
git merge --abort
注意
该命令仅仅在合并后导致冲突时才使用。git merge --abort将会抛弃合并过程并且尝试重建合并前的状态。但是,当合并开始时如果存在未commit的文件,git merge --abort在某些情况下将无法重现合并前的状态。(特别是这些未commit的文件在合并的过程中将会被修改时)
警告:运行git-merge时含有大量的未commit文件很容易让你陷入困境,这将使你在冲突中难以回退。因此非常不鼓励在使用git-merge时存在未commit的文件,建议使用git-stash命令将这些未commit文件暂存起来,并在解决冲突以后使用git stash pop把这些未commit文件还原出来。
二、插话
(1)公司用的是gitlab,首先申请好账号密码,登录上去;
(2)下载Git:https://www.cnblogs.com/wj-1314/p/7993819.html
(3)在gitlab要设置SSH公钥才能下载代码,所以要生成一个ssh公钥;
(4)如何配置SSH?:https://www.jianshu.com/p/bf7b09e234c8
(5)开发工具
我的前端用的是VScode,后端用IDEA,都熟悉一下,命令行方式也最好都记一记;
三、从gitlab获取代码
1. 命令行
(1)cd 到要放项目的文件夹
(2)git clone 项目的网址
2. IDEA
(1)
(2)输入网址,测试一下
(3)项目一般都有一个主线,多个分支,下载到本地后,记得先切换分支,再操作代码(切换在IDEA右下角)
3. Vscode
步骤都差不多,先打开一个文件夹,然后git clone下来然后切换分支就好
四、合并操作
这个弄了一下午,就是首先要搞清楚三点:
(1)主线master和分支branch-app-dev。在切换分支那里可以看到,一份本地的master和dev,一份远程的master和dev;
(2)master保留的是原始的项目代码,也就是纯模型生成的,dev里面是我们自己修改过的代码;
(3)当master更新了,也就是模型重新生成了之后,我们要把更新的master那一次提交commit合并到我们自己写的dev里面(注意注意不要把整个master给合并到dev去了,这样自己写的代码就没了);
============================================
这里主要用的是命令行,开发工具上操作还不太熟悉。
1. 命令行
把master分支提交到dev分支。
首先,切换到master分支,敲 git log 命令,查找需要合并的commit记录,比如commitID:7fcb3defff;
然后,切换到dev分支,使用 git cherry-pick 7fcb3defff 命令,就把该条commit记录合并到了dev分支,这只是在本地合并到了dev分支;
最后,git push 提交到master远程,至此,就把master分支的这条commit所涉及的更改合并到了dev分支。(这步暂时没做,因为还要继续写自定义的代码)
2.IDEA
(1)切换到dev分支
左下角的VersionControll,然后点log,切换查询条件,可以看到最近的master分支的提交记录
然后选中某一条,点这个就可以将那次提交记录,合并到我们当前的dev分支
3.vscode
这个,也是直接切换到dev分支,直接git命令将master给合并过来了。
四、目前更新app-dev分支步骤
dev的合并到app-dev
1.git checkout dev
2.git pull(最好是git fetch + git merge)
3.git checkout branch-app-dev
4.git status检查是否有需要Pull和commit的
5.合并dev分支
6.处理冲突
7.运行检查
8.git push推送到app-dev