Git安装与使用总结
Git分布式版本控制工具
一、Git安装与配置
-
Git基本配置
-
打开Git Bash
-
设置用户信息
# 配置 "本地" 用户名和用户邮箱; 配置位置 ${git_home}/.git/config git config --local user.name xxx git config --local user.email xxx@xx.com # 配置 "全局" 用户名和用户邮箱; 配置位置 ${git_home}/.gitconfig git config --global user.name xxx git config --global user.email xxx@xx.com # 配置 "系统" 用户名和用户邮箱(需要root权限); 配置位置 /etc/.gitconfig git config --system user.name xxx git config --system user.email xxx@xx.com
-
查看用户信息
# 查看用户名和用户邮箱 git config --global user.name git config --global user.email
-
-
为常用指令配置别名(可选)
-
打开用户目录,创建
.bashrc
文件部分windom 系统不允许用户创建 点号开头的文件,可以使用gitBash,指令行创建 touch ~/.bashrc
-
在
.bashrc
文件中输入如下内容:# 用于输出git提交日志 alias git-log='git log --pretty=oneline --all --graph --abbrev-commit' # 用于输出当前目录所有文件及基本信息 alias ll='ls alh'
-
-
解决GitBash中文乱码问题
-
打开GitBash执行一下命令
git config --global core.quotepath false
-
${git_home}/etc/bash.bashrc 文件最后加入下面两行
git_home -- git 的安装目录
export LANG="zh_CN.UTF-8" export LC_ALL="zh_CN.UTF-8"
-
二、获取本地仓库
要使用Git对我们的代码进行版本控制,首先需要获得本地仓库
-
在电脑的任意位置创建一个空目录作为我们的本地Git仓库
-
进入这个目录,右键打开git bash窗口
-
执行bash命令
git init
-
创建成功以后可以在文件夹下看到隐藏的
.git
目录
三、基本操作指令
Git 工作目录下对文件的修改会存在几个状态,这些修改的状态会随着我们执行Git命令而发生变化
-
使用命令控制这些状态之间的状态转换:
# . 通配符,表示所有文件 # 工作区 => 暂存区 git add 文件名 # 暂存区 => 工作区 git reset HEAD 文件名 # 暂存区 => 本地仓库 git commit [文件名] -m "提交说明"
-
恢复工作区
# 恢复工作区(将文件从暂存区或上一次提交的状态恢复到工作区)的所有更改,未跟踪的文件不会有变化。恢复工作区的所有文件风险比较大,会丢失所有工作区的修改,慎用 git checkout . # 恢复单个文件 git checkout -- a.txt
-
切换到标签
git checkout tags/<tag-name>
-
查看修改的状态
git status
-
查看提交日志log
git log [option] # 记录所有操作,包括版本回退记录 git reflog [option] # q退出
- options
- --all 显示所有分支
- --pretty=oneline 将提交信息显示为一行
- --abbrev-commit 使输出的commitld更简洁
- --graph 以图形形式显示
- options
-
版本回退
git reset --hard commitID
- commitID: 版本号可以使用前7位,也可以使用完整版本号
- 如果想要撤销 版本回退可以再次使用版本回退指令,只需要将commitID设置为想要撤销到那个版本号
- 如果找不到撤销的那个版本可以使用 git reflog 找回对应版本号
- 鼠标选中即可复制版本号,按下鼠标滚轮即可粘贴
-
变基
rebase
-
变基的作用
Git 的 变基主要是使git 的提交记录变得更加简洁,可以将多个版本整合成一个版本 **注意: 不要使用rebase合并已经push到远程仓库的记录
-
使用步骤
# 进行三次版本提交 touch 1.py git add . git commit -m 'v1' touch 2.py git add . git commit -m 'v2' touch 3.py git add . git commit -m 'v3' # 整合提交记录 # 方式一: 将当前所在版本到之前的某个版本号之间的所有版本进行合并 git rebase -i 当前版本之前的某个版本号 # 方式二: 从当前所在版本开始往前合并几个版本(这里是往前合并3个版本) git rebase -i HEAD~3 # 编辑合并信息 # 原始信息 pick xxx01 v1 pick xxx02 v2 pick xxx03 v3 # 编辑后 (前面的s表示压缩合并,即v3与v2合并,v2再与v1合并) pick xxx01 v1 s xxx02 v2 s xxx03 v3 # 保存修改,编辑合并记录信息后保存 # eg: v1&v2&v3 # git log查看记录就只有一条提交记录了
-
-
打版本标签
-
使用方式
# 为当前版本打标签 git tag -a tag名 -m tag描述信息 # 推送tag到远程仓库 git push 仓库名 --tags
-
使用示例
git tag -a v1 -m "第一版" git push origin --tags
-
-
添加文件至忽略列表
-
说明
一般我们总会有些文件无需纳入Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。在这种情况下,我们可以在工作目录中创建一个名为.gitignore 的文件(文件名称固定),列出要忽略的文件模式
-
示例
-
创建忽略文件
touch .gitignore
-
编辑忽略文件
# no .a files *.a # ignore all files in the build/ directory build
-
-
四、分支
-
分支的作用
几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。
-
查看本地分支
git branch
-
创建本地分支
git branch 分支名
-
切换分支
git checkout 分支名 # 直接切换到不存在的分支(创建并切换分支) -- 使用比较多 git checkout -b 分支名
-
合并分支
# 合并分支xxx 到当前操作的分支上来(首先切换到目标分支) git merge xxx
-
删除分支
不能删除当前分支,只能删除其他分支
# 删除分支 b1 会做各种检查 git branch -d b1 # -D 不做任何检查,强制删除 (比如分支未合并到其他分支进行删除操作) git branch -D b1
-
解决冲突
当两个分支上对文件的修改可能会存在冲突 (commit提交到本地仓库时),例如同时修改了同一个文件的同一行,这时就需要手动解决冲突,解决冲突步骤如下:
-
处理文件中冲突的地方(保留最终想要的结果即可)
-
将解决完冲突的文件加入暂存区
git add .
-
提交到仓库
git commit
-
-
开发中分支使用原则与工作流程
-
在开发中,一般有如下分支使用原则
-
master (生产)分支
线上分支,主分支,中小规模项目作为线上运行的应用对应的分支;
-
develop(开发)分支
是从master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线要求,都可以在此版本进行开发,阶段开发完成后,需要是合并到master分支,准备上线。
-
feature/xxx 分支
从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到develop分支。
-
hotfix/xxx 分支
从master派生的分支,一般作为线上bug修复使用,修复完成后需要合并到master、test、develop分支。
-
还有一些其他分支,在此不再详述,例如test分支(用于代码测试)、 pre分支(预上线分支)等等。
-
-
gitflow
工作流
-
五、Git远程仓库
前面我们已经知道了Git中存在两种类型的仓库,即本地仓库和远程仓库。那么我们如何搭建Git远程仓库呢?我们可以借助互联网上提供的一些代码托管服务来实现,其中比较常用的有GitHub、码云、GitLab等。
>> gitHub(地址: https://github.com/ )是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,故名gitHub
>> 码云(地址: https://gitee.com/)是国内的一个代码托管平台,由于服务器在国内,所以相比于GitHub,码云速度会更快
>> GitLab(地址: https://about.git1ab.com/)是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务,一般用于在企业、学校等内部网络搭建git私服。
-
1> 新建仓库
-
2> 配置SSH公钥
-
在本机生成SSH公钥
-
在本机Git Bash 上生成密钥对
ssh-keygen -t rsa # 提示直接回车即可,如果公钥已经存在,则自动覆盖 # 如果无法安装可以在指令前加 winpty # git使用ssh-keygen遇到的问题:https://blog.csdn.net/qq_45523430/article/details/128172725
-
-
查找秘钥所在路径
# 查看秘钥 ls ~/.ssh # 读取公钥 cat ~/.ssh/id_rsa.pub
-
将本机公钥
id_rsa.pub
添加到Gitee的SSH公钥 -
在本机验证是否配置成功
ssh -T git@gitee.com # 提示第一次访问gitee,输入yes # 如果无法下一步可以在指令前加 winpty # 出现successfully authenticated 说明配置成功
-
-
3> 将本地仓库推送到远程仓库
- 使用ssh地址 添加一个远程仓库
git remote add origin git@gitee.com:dongdengwen/git_study.git # 一个本地仓库可以对应多个远程仓库,所以要给推送的远程仓库取名,一般第一个仓库取名origin git init # 出现 fatal: Not a git repository (or any of the parent directories): .git 执行以上指令
-
查看远程仓库
git remote
-
将本地代码推送到仓库
git push [-f] [--set-upstream] [远端名称 [本地分支名][:远端分支名]] # -f 强制覆盖(一般公司会禁止该指令) # --set-upstream 推送到远端的同时建立起和远端分支的关联关系 # 推送本地 master分支代码 到远程仓库origin 的 master分支 git push origin master:master # <本地和远程分支名一样,这里是省略了远程分支名> git push origin master
-
本地分支与远端分支进行关联,关联以后可以省略本地分支名和远端分支名
# 查看 本地与远端 对应关系 git remote -vv # 查看 本地分支与远端分支 对应关系 git branch -vv # 关联本地分支master与远端分支master git push --set-upstream origin master:master # 直接推送本地master 到 远端 master分支<省略分支名> 这里必须在对应分支内执行指令这里是master git push
-
4> 从远程仓库克隆到本地
# git clone 仓库路径 [本地目录] 本地目录可以省略,会自动生成一个与远端同名的目录 git clone git@gitee.com:dongdengwen/git_study.git hello-git
-
5>从远程仓库中抓取和拉取
远程分支和本地的分支一样,我们可以进行merge操作,只是需要先把远端仓库里的更新都下载到本地,再进行操作。
-
抓取命令
# 抓取指令就是将仓库里的更新都抓取到本地,不会进行合并;如果不指定远端名称和分支名,则抓取所有分支 git fetch [remote name] [branch name] # 已关联本地分支与远端分支 则按关联关系进行抓取 git fetch # 抓取远端master分支 git fetch origin master # 合并远端master分支 git merge origin/master
-
拉取命令
git pull [remote name] [branch name] # 已关联本地分支与远端分支 则按关联关系进行拉取 git pull # 抓取并合并远端master分支 git pull origin master # 拉取指令就是将仓库里的修改拉到本地并自动进行合并,等同于fetch + merge # 如果不指定远端名称和分支名,则抓取所有并更新当前分支 # 远端仓库 => 本地仓库 git fetch origin dev # 本地仓库 => 工作区 git merge origin/dev
-
-
6>解决合并冲突
-
背景说明
在一段时间,A用户和B用户修改了同一个文件,且修改了同一行位置的代码,此时会发生合并冲突.A用户在本地修改代码后优先推送到远程仓库,此时B用户在本地修订代码,提交到本地仓库后,也需要推送到远程仓库,此时B用户晚于A用户,故需要先拉取远程仓库的提交,经过合并后才能推送到远端分支
-
冲突解决流程
-
A用户修改文件并提交到远端仓库
vim file01.py git add . git commit -m "update count 1" git push
-
B用户修改同一个文件,且修改了同一行位置的代码
vim file01.py git add . git commit -m "update count 2" git pull # 或者 git fetch 再 git merge vim file01.py # 解决冲突 git add . git commit # 不加-m 会自动填写提交声明为: 合并分支... git push # 保持远端与本地代码一致
-
A用户查看远端有变化,拉取远端代码到本地
git pull
-
-
六、在IDEA 中使用Git
-
1> 在IDEA 中配置Git
安装好Intelli] DEA后,如果Git安装在默认路径下,那么idea会自动找到git的位置,如果更改了Git的安装位置则需要手动配置下Git的路径。选择File→Settings打开设置窗口,找到Version Control下的git选项;
-
2> 在IDEA中操作Git
场景: 本地已经有一个项目,但是并不是git项目,我们需要将这个放到码云的仓库里,和其他开发人员继续一起协作开发。
-
在gitee新建一个项目仓库 <参照5.1>
-
使用IDEA打开本地项目或者直接在IDEA中创建项目
-
在工程项目目录下添加一个
.gitignore
文件 -
在菜单栏选择 VCS / lmport into Version Control / Create Git Repository.
-
选择Git管理的项目
-
验证IDEA配置成功
-
本地仓库数据查看
-
推送本地仓库到远端仓库
-
七、IDEA中集成GitBash作为Terminal
八、重点说明
- 切换分支前先提交commit本地修改 (防止数据丢失)
- 代码及时提交,提交过了就不会丢