Git-Git基础
一、版本控制
1. 集中式版本控制与分布式版本控制。
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。
Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
2.Git工作流程
Workspace: 工作区,就是你平时存放项目代码可以看到的目录。
Index / Stage: 暂存区,英文叫 stage 或 index。用于临时存放你的改动,事实上它只是一个文件,一般存放在 .git 目录下的 index 文件(.git/index)中,保存即将提交到文件列表信息。
Repository: 工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本。
Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换。
1. clone(克隆): 从远程仓库中克隆代码到本地仓库。
2. checkout (检出):从本地仓库中检出一个仓库分支然后进行修订。
3. add(添加): 在提交前先将代码提交到暂存区。
4. commit(提交): 提交到本地仓库。本地仓库中保存修改的各个历史版本。
5. fetch (抓取) : 从远程库,抓取到本地仓库,不进行任何的合并动作,一般操作比较少。
6. pull (拉取) : 从远程库拉到本地库,自动进行合并(merge),然后放到到工作区,相当于fetch + merge。
7. push(推送) : 修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库 。
二、Git安装与常用命令
下载地址: https://git-scm.com/download
1. 当安装Git后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用该用户信息。
设置用户信息:
git config --global user.name “xxx”
git config --global user.email “hello@xxx.cn”
查看用户信息:
git config --global user.name
git config --global user.email
2.乱码问题解决
打开GitBash执行下面代码:
git config --global core.quotepath false
${git_home}/etc/bash.bashrc 文件最后加入下面两行代码
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
3.常用命令
1、新建代码库
# 在当前目录新建一个Git代码库 git init # 新建一个目录,将其初始化为Git代码库 git init [project-name] # 下载一个项目和它的整个代码历史 git clone [url]
2、查看文件状态
#查看指定文件状态 git status [filename] #查看所有文件状态 git status
3、工作区<-->暂存区
# 添加指定文件到暂存区 git add [file1] [file2] ... # 添加指定目录到暂存区,包括子目录 git add [dir] # 添加当前目录的所有文件到暂存区 git add . #当我们需要删除暂存区或分支上的文件, 同时工作区也不需要这个文件了, 可以使用(⚠️) git rm file_path #当我们需要删除暂存区或分支上的文件, 但本地又需要使用, 这个时候直接push那边这个文件就没有,如果push之前重新add那么还是会有。 git rm --cached file_path #直接加文件名 从暂存区将文件恢复到工作区,如果工作区已经有该文件,则会选择覆盖 #加了【分支名】 +文件名 则表示从分支名为所写的分支名中拉取文件 并覆盖工作区里的文件 git checkout
4、工作区<-->资源库(版本库)
#将暂存区-->资源库(版本库) git commit -m '该次提交说明' #如果出现:将不必要的文件commit 或者 上次提交觉得是错的 或者 不想改变暂存区内容,只是想调整提交的信息 #移除不必要的添加到暂存区的文件 git reset HEAD 文件名 #去掉上一次的提交(会直接变成add之前状态) git reset HEAD^ #去掉上一次的提交(变成add之后,commit之前状态) git reset --soft HEAD^
5、远程操作
# 取回远程仓库的变化,并与本地分支合并 git pull # 上传本地指定分支到远程仓库 git push
6、其它常用命令
# 显示当前的Git配置 git config --list # 编辑Git配置文件 git config -e [--global] #初次commit之前,需要配置用户邮箱及用户名,使用以下命令: git config --global user.email "you@example.com" git config --global user.name "Your Name" #调出Git的帮助文档 git --help #查看某个具体命令的帮助文档 git +命令 --help #查看git的版本 git --version
三、分支
分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
查看当前分支:git branch 创建新分支:git branch <name> 切换分支:git checkout <name> 创建+切换分支:git checkout -b <name> 合并某分支到当前分支:git merge <name> 删除分支:git branch -d <name>
解决冲突:
当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解
决冲突,解决冲突步骤如下:
1. 处理文件中冲突的地方。
2. 将解决完冲突的文件加入暂存区(add)。
3. 提交到仓库(commit)。
冲突部分的内容处理如下所示:
四、远程仓库
#添加远程仓库 命令: git remote add <远端名称> <仓库路径> git remote add origin git@gitee.com/**/**.git #查看远程仓库 命令:git remote
#推送到远程仓库 命令:git push [-f] [--set-upstream] [远端名称 [本地分支名][:远端分支名] ] #如果远程分支名和本地分支名称相同,则可以只写本地分支 git push origin master #-f 表示强制覆盖 #--set-upstream 推送到远端的同时并且建立起和远端分支的关联关系。 #如果当前分支已经和远端分支关联,则可以省略分支名和远端名。 # 将master分支推送到远程仓库,并与远程仓库的master分支绑定关联关系 git push --set-upstream origin master
#将远程仓库克隆到本地 #将远程仓库克隆到本地git_test02目录下 git clone git@gitee.com/**/**.git git_test #将本地修改推送到远程仓库 #将修改加入暂存区并提交到仓库,提交记录内容为:add file git add . git commit -m 'add file' # 将master分支的修改推送到远程仓库 git push origin master #将远程仓库的修改更新到本地 # 将远程仓库修改再拉取到本地 git pull # 以精简的方式显示提交记录 git -log