当前位置:   article > 正文

Git基本原理及常用操作全集(超详细)_git原理以及操作

git原理以及操作



1、Git基本原理

1.1、Git概述

1) Git和SVN是我们最常用的版本控制系统(Version Control System, VCS)

2) Git三大区域的划分(详见下文Git基本原理)

  • 工作区:能够看见的目录
  • 暂存区:也叫Index、Stage,通常存放在.git/index文件下
  • 版本库:分为本地版本库和远程版本库

3) 版本库状态

几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着可以把我们的工作从开发主线上分离开来,以免影响开发主线

1.2、分支

1.2.1、什么是分支

分支是一个代码的副本;个人在开发时,拉出一个分支用于个人功能开发,在这个分支上的所有操作都不会影响到其它同事的工作,当个人功能开发完成后,可以将功能合并到最新项目中

1.2.2、常见分支

1)master:主分支

默认生成,用于保存对外(向用户)发布的版本

2)dev:开发分支

为了保持主分支代码的稳定性,开发工作不在主分支进行,而是在dev分支进行

3)feature:个人功能开发分支

多团队基于dev协作,为了保持开发的稳定性,每个人在开发自己的功能时应该基于dev分支拉出一个自己的分支,当开发完成后合并到dev分支

4)hotfix:个人修改bug分支

当修改bug时,每个人应该基于dev分支拉出一个自己的修改bug分支,当修改完成后合并到dev分支

1.3、Git基本原理

Git基本原理

1.3.1、基本概念

Workspace:工作区

Index/Stage:暂存区

Repository:版本仓库区(本地仓库)

Remote:版本仓库区(远程仓库)

// 查看状态
git status
  • 1
  • 2

1)红色:表示文件在当前工作区中(Workspace),未加入版本控制

2)绿色:表示文件已经添加到暂存区(Index/Stage),已加入版本控制,暂未提交

3)白色:表示文件已经提交到本地仓库(Repository),已加入版本控制,已提交,无改动

4)蓝色:已加入版本控制,已提交,有改动

1.3.2、Git基本操作原理(流程)

1)结束代码编写后,首先查看状态,发现文件都是红色,表示文件在当前工作区中

git status
  • 1

2)把当前分支工作区内容添加到暂存区

git add .
  • 1

3)再次查看状态,发现文件变为绿色,表示文件已经全部添加到暂存区

git status
  • 1

4)把暂存区内容提交到本地仓库,发现文件变为白色

git commit -m "描述说明"
  • 1

5)查看当前分支

git branch
  • 1

6)切换分支到主分支master

git checkout master
  • 1

7)合并本地分支到master主分支中(本地仓库)

git merge 本地分支
  • 1

8)将本地仓库主分支master代码推送至远程仓库主分支master(远程仓库)

git push origin master
  • 1

2、常用操作(命令版)

2.1、新建本地仓库

新建一个文件夹,用于存放公司项目;进入该文件夹后右键Git Bash,执行

// 将此目录作为本地仓库(初始化git)
git init
  • 1
  • 2

2.2、克隆项目

进入本地仓库后右键Git Bash,执行

// 下载远程master分支,并且本地分支名字为master
git clone Http地址(项目URL)
// 下载指定远程dev分支,并且本地分支名字为dev
git clone -b 指定分支(dev) Http地址(项目URL)
  • 1
  • 2
  • 3
  • 4

执行git clone xxx后会发生什么?

1)Git会自动为你将远程仓库命名为origin,并下载其中所有的数据到本地
2)在本地建立所有远程存在的分支,并且命名为origin/xxx,例如远程分支有master、develop,那么本地就会建立origin/master分支、origin/develop分支,并且它们都是处于remotes目录下,是隐藏的。使用命令git branch -a就可以看到隐藏目录remotes,结果显示为remotes/origin/master以及remotes/origin/develop
3)接着,Git会继续建立一个属于你的本地master和develop分支,位置和远程origin/master、origin/develop分支处于相同的位置,这样,我们在本地仓库的本地分支和远程分支就都有了,并且始终在同一位置
  • 1
  • 2
  • 3

2.3、创建及选择本地分支

打开自己项目的目录,右键Git Bash,执行

// 创建分支(基于当前分支创建)
git branch my_dev
// 选择分支
git checkout my_dev
// 创建并选择分支,以上两条可合并为
git checkout -b my_dev
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.4、修改代码并提交到本地分支

修改代码,提交到本地分支(my_dev),并Push到远程仓库

// 将所有未添加到暂存区的文件添加到暂存区;添加单个文件到暂存区:git add 单个文件名
git add .
// 提交到本地仓库
git commit -m "描述说明"
// Push本地分支到远程仓库(推送自己的修改):若推送失败,先git pull更新
git push origin 分支名(my_dev)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.5、合并本地分支到指定分支

合并本地分支(my_dev)到指定分支(dev),并Push到远程仓库

// 切换到指定分支
git checkout dev
// 更新指定分支(拉取最新代码),多人修改时适用
git pull origin dev
// 将本地分支合并到指定分支(指定分支为当前分支dev),不能在被合并的分支上使用该命令
git merge my_dev
// Push指定分支到远程仓库(此时dev是最新的)
git push origin dev
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.6、其它常用命令

// 查看当前本地分支
git branch
// 查看当前远程分支
git branch -r
// 删除本地分支
git branch -d my_dev
// 删除远程分支
git push origin -d dev
// 重命名本地分支
git branch -m old_name new_name
// 查看提交历史记录(包括commitID、作者、提交事件、提交信息)
git log
// 查看版本差异:查看本地dev与远端origin/dev的版本差异
git log -p dev..origin/dev
// 版本回退:将版本重置到某个commit
git reset --hard commitID
// fetch(提取):从远程分支提取最新版本到本地分支(不会自动合并)
git fetch origin dev
// pull(拉取):从远程分支拉取最新版本到本地分支(会自动合并)
git pull origin dev
// 查看远程仓库信息
git remote -v
// 新建分支并和远程分支进行关联
git checkout -b "new branch" origin/"new branch"
// 本地分支与远程分支进行关联(需先切换到本地分支)
git push -u origin/remote-branch
// 本地仓库关联远程仓库
git push --set-upstream origin master
// 撤销工作区修改:使用版本仓库中的文件或暂存区中的文件替换工作区的文件,让文件回到最近一次git commit或git add时的状态
git checkout -- "文件名"

// 补充操作:
// 1)初始化
git config --global user.email "your email"
git config –-global user.name "your name"
// 2)秘钥
// 查看是否存在秘钥:id_rsa是私钥;id_rsa.pub是公钥;id_rsa.pub是需要上传到github的SSH KEY
ls -al ~/.ssh
// 3)生成秘钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
// 4)已创建本地仓库,未创建远程仓库
// ① 初始化:git init ② 移除原有的origin:git remote rm origin ③ 添加你的远程仓库(SSH地址):git remote add origin "your remote repo" ④ 更新本地仓库:git pull ⑤ 首次推送与远程仓库建立关联,以后直接git push即可:git push --set-upstream origin master
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

2.7、合并分支冲突问题

2.7.1、冲突原因

多个用户在相同的版本上对同一文件进行了修改操作

2.7.2、解决方案

1) 对同一文件的不同行进行了修改

Git会自动合并多个用户对不同行的修改
  • 1

2) 对同一文件的相同行进行了修改

// 第一步:拉取远程分支
git fetch origin dev
// 第二步:将本地分支合并到远程分支
git merge my_dev
// 第三步:修改冲突,标记已解决
git add .
// 第四步:提交修改到本地仓库
git commit -m "描述说明"
// 第五步:Push本地分支到远程仓库
git push origin my_dev
// 注意:
// 如果第2次需要修改本地分支,需要先切换到本地分支,然后才能修改文件;否则会默认在远程分支中修改(因为上面的步骤切回了远程分支)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3) 对同一文件的相同行和不同行都进行了修改

对于不同行,Git会自动的合并
对于相同行,采用方式2)即可
  • 1
  • 2

2.8、Git仓库迁移

定义:把一个项目中所有分支等(Git仓库)完整的迁移到另一个仓库地址

步骤:

// 方式1:
// 1)右键Git Bash,以bare的方式克隆原仓库镜像到本地
git clone --bare 原Http地址(原项目URL,如https://github.com/old-repository.git)
// 2)进入本地仓库
cd 仓库名称(如old-repository.git)
// 3)将镜像Push到新仓库地址
git push --mirror 新Http地址(新项目URL,如https://github.com/new-repository.git)
// 4)删除原仓库
cd ..
rm -rf 仓库名称(如old-repository.git)

// 方式2:
// 1)右键Git Bash,克隆原仓库镜像到本地
git clone --mirror 原Http地址(原项目URL,如https://github.com/old-repository.git)
// 2)进入本地仓库
cd 仓库名称(如old-repository.git)
// 3)将仓库中原来的远程地址改为新仓库地址
git remote set-url --push origin 新Http地址(新项目URL,如https://github.com/new-repository.git)
// 4)将修改后的Git镜像仓库Push到新仓库
git push --mirror
// 5)删除原仓库
cd ..
rm -rf 仓库名称(如old-repository.git)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

2.9、Git其它操作

1).gitignore文件

// 在git工作区根目录下创建.gitignore文件,将需要忽略的文件名写进去,git就会自动忽略这些文件
// 若.gitignore文件是后续添加的,需要先清除.idea的git缓存:
git rm -r --cached .idea
  • 1
  • 2
  • 3

2) Git配置文件

git配置文件放在 ~/.gitconfig
  • 1

3、常用操作(软件版)

因使用软件的不同而操作不同

IDEA集成Git版本控制相关操作见:传送门

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/487834
推荐阅读
相关标签
  

闽ICP备14008679号