Git简介
版本控制,在开发过程中每实现一个重要功能就需要保存一个版本,即使异常也能回退版本。Git是一个分布式的版本控制系统,不仅实现版本控制还可以进行多人协同控制。
简单来说,Git只是一个命令行工具,一个分布式版本控制系统。正是它在背后管理和跟踪你的代码历史版本,好比一个时光机,让你在代码出错时不至于手忙脚乱,能快速回退之前的历史版本。 类似的工具还有SVN。
GitHub是一个代码托管网站,背后使用Git作为版本管理工具(而非svn)。主要服务是将你的项目代码托管到云服务器上,而非存储在自己本地硬盘上。
类似的网站还有gitlab.com,bitbucket.com,coding.com(国内),gitee.com(码云),GitHub中文社区:githubs.cn/
Git环境搭建
- Git安装:
#安装后,打开设置用户名和邮箱,记录用户信息,git log查看
#执行
git cinfig --global user.name "Your Name"
git config --global user.email@example.com "..."
# 查看信息
git config -l
#测试:cmd,执行查看git版本
git version
Git应用
Git工作区
Git仓库
Git基本操作
git log
查看历史记录git status
查看状态git add .
转到暂存区git commit -m “版本信息”
m是message缩写
Git回退版本
Git必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本(指针),上一个版本就是HEAD^
,依次时HEAD^2, HEAD^3....
使用git reset
指令:
git reset -hard HEAD^1
-- hard 表示回退到之前版本,数据会抹除,没有修改记录
-- soft 表示回退版本但会保留改动记录并会添加到暂存区
-- mix 表示回退版本也会保留距离,但是任然在工作区
Git不仅能像后回退还能向前回退,回退到了某个版本,又想恢复到新版本怎么办?找到到新版本的commit id通过id来恢复新版本。
Git提供了一个命令git reflog
用来操作日志的指令id:
//通过id恢复指令之前的版本
git reset --hard id""
Git还原文件
当你编写了一小段代码,导致项目跑不起来是回退版本是非常可惜的可以使用git checkout -- 文件路径
来撤回之前的代码。
命令git checkout -- readme.txt
意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
-
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
-
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
git checkout -- file
命令中的--
很重要,没有--
,就变成了“切换到另一个分支”的命令
当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
。
当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <fileId>
,就回到了提交前,再次git checkout -- file
撤销编辑的内容。
Git删除文件
如果发现某些文件不再需要了,可以使用git rm "文件路径"
来删除它。
Git远程仓库
前面的仓库是本地仓库,多人协同开发时每个人都在本地维护版本,若多人之间需要共享代码,合并代码则需要远程仓库。
mkdir bolen
cd bolen //创建本地目录
git init //初始化本地git仓库
vi README.txt
git add README.txt //转到工作区
git commit -m "first commit" //提交到master分支
git remote add origin "仓库地址" //关联远程仓库
git push -u origin "master" //上传到远程仓库的分支master
git remote -v //查看远程仓库版本
git pull //远程仓库下载分支
git remote add origin "仓库地址"
关联远程仓库,Git支持多种协议,默认的git://使用ssh,但也可以使用https。取决于仓库地址,使用ssh会生成公钥,并保存,之后就可以直接上传分支了,使用https的每次需要输入认证信息。
把本地库的内容推送到远程,用git push
命令,实际上是把当前分支master推送到远程。
如果添加的时候地址写错了,或者就是想删除远程库,可以用git remote rm <name>
命令。使用前,建议先用git remote -v
查看远程库信息。
//通过该命令来删除它origin对应远程仓库名
git remote rm "origin"
Git添加出现的错误
LF和CRLF是一种换行机制windows和linux,mac不同。
git命令更改默认换行处理:git config --global core.autocrlf false
false
是可选值有三个参数,当为true
时,这意味着你在任何时候添加(add)文件到git仓库时,git都会视为它是一个文本文件(text file),它将把crlf变成LF。当为false
当设置成false时不做转换操作,文本文件保持原来的样子。input
把CRLF改为LF,window不适用。
出现该错误是项目的所有文件每被提交到暂存区,重新执行:git commit
即可
Git克隆到本地
将服务器上的仓库中的项目克隆到本地git clone "地址"
Git分支
每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。Git中master分支叫主分支。HEAD指向的就是当前分支。提交命令会提交当前分支的内容。
Git创建一个分支增加一个dev分支,改改HEAD(指针)的指向,工作区的文件都没有任何变化。
切换分支后,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变:
我们注意到切换分支使用git checkout <branch>
,而前面讲过的撤销修改则是git checkout -- <file>
,同一个命令,有两种作用,确实有点令人迷惑。最新版本的Git提供了新的git switch
命令来切换分支:
创建并切换到新的dev分支,可以使用:
git switch -c dev
直接切换到已有的master分支,可以使用:
git switch master
实际上,切换分支这个动作,用switch更科学。因此,最新版本的Git提供了新的git switch命令来切换分支:
还有一种方法时三方合并,两个分支都提交,在在master中再次提交。master又生成一个节点。
合并冲突
冲突后git会将冲突部分标识在当前分支的文件中,去修复冲突再次提交。
版本的控制是基于分支实现的如dev分支为默认分支时,其执行暂存命令git commit
另一个master分支的指针就会指向当前提交的节点,再次提交指针再次移动,当某次修改发生错误时,切换分支就回到了上一版本。
Git与IDEA关联
然后到创建的目录下git init
即可,该文件就变成了一个本地仓库。
或者通过IDEA的VSC版本控制(Vsersion Control Show)实现仓库创建:
注意:IDEA创建项目时有许多文件时不需要上传到服务器的仓库的,例如:
图中画线的部分,一些是记录文件的本地信息,一些是生成的编译后的文件,或者properties,yaml配置文件这些对于其他用户克隆的来说本地环境完全不一样,而且记录文件信息的文件在打开项目时也会自动生成,即使上传了反而不起作用。
通过.gitignore
文件排除不需要的文件
忽略文件在仓库之间创建,
Idea对git的实现都是在VCS中。包括提交,下载,克隆,下载中文插件方便操作 😒
多人协同开发
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/156311.html