Git安装&使用(版本控制)

一、Git简介(版本控制)

版本控制系统发展可以分为三个阶段:

  • 本地版本控制系统
  • 集中式版本控制系统
  • 分布式版本控制系统
  1. 什么是版本控制
    可以把一个版本控制系统(缩写VCS)理解为一个“数据库”,在需要的时候,它可以帮你完整地保存一个项目的快照。当你需要查看一个之前的快照(称之为“版本”)时,版本控制系统可以显示出当前版本与上一个版本之间的所有改动的细节。

什么是“版本控制”? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。在 GIT CODE 中,我们对保存着软件源代码的文件作版本控制,但实际上,你可以对任何类型的文件进行版本控制。
在团队开发中使用版本控制系统的好处

  1. 版本管理
    避免版本管理混乱。这是使用版本管理的最主要原因,也是版本管理的目的所在。你肯定不会希望在本地手动备份了多个副本后,到头来却不知道那个备份是最新的,那个备份进行了什么修改,修改日期是什么时候等等一切你记不清的问题。而版本管理软件能解决这些问题,它有详细的日志,能记住你的每一次提交、每一次改动,并且能够比较查看不同版本之间的异同,并且可以恢复到之前的任一版本。

  2. 提高代码质量
    在没有版本管理之前,可能经常要在代码里写些不相关的注释,比如:某人某日对某代码进行修改;或是将一些不确定是否使用的代码用注释的形式保留等等,这些也就是僵尸代码啦。现在这些工作都可以交由版本管理工具完成,把这些不相关的僵尸代码从代码里删掉吧。
    4.提高协同、多人开发时的效率。
    及时提交更新代码,能让团队中的成员了解到代码的最新情况,避免重复劳动。
    5.明确分工责任。
    什么时候谁对代码做了修改、修改了什么内容,版本管理都会记录在案,方便查询,追究责任。
    6.除了代码以外,很多文档、个人资料,如:简历等等都可以进行版本管理,这是有趣而高效的。凡是需要持续修改的文档资料都可以进行版本管理。
    版本控制工具:
    下面来介绍下目前常见的版本控制工具

  3. Git

Git是目前世界上最先进的分布式版本控制系统,使用Git和Gitlab搭建版本控制环境是现在互联网公司最流行的版本控制方式
简介:
Git是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有事务。
Git易于学习,占用内存小,具有闪电般快速的性能。
Github地址:https://github.com/git/git
官方网站:https://git-scm.com/
官方文档:https://git-scm.com/docs
中文文档:https://git-scm.com/book/zh/v2
下载地址:https://git-scm.com/downloads

  1. SVN

简介:
TortoiseSVN是一款非常易于使用的跨平台的 版本控制/版本控制/源代码控制软件。它基于Apache Subversion(SVN)® ; TortoiseSVN为Subversion提供了一个简单易用的用户界面。
TortoiseSVN开源地址:https://osdn.net/projects/tortoisesvn/
Subversion的Github地址:https://github.com/apache/subversion
官方网站:https://tortoisesvn.net/
官方文档:https://tortoisesvn.net/docs/release/TortoiseSVN_en/index.html
中文文档:https://tortoisesvn.net/docs/release/TortoiseSVN_zh_CN/index.html
下载地址:https://tortoisesvn.net/downloads.html

  1. HG

简介:
Mercurial是一个免费的分布式源代码管理工具。它可以有效地处理任何规模的项目,并提供简单直观的界面。Mercurial 是一种轻量级分布式版本控制系统,采用 Python 语言实现,易于学习和使用,扩展性强。
官方网站:https://www.mercurial-scm.org/
官方文档:https://www.mercurial-scm.org/wiki/BeginnersGuides
下载地址:https://www.mercurial-scm.org/downloads

  1. CVS

CVS是版本控制系统,是源配置管理(SCM)的重要组成部分。使用它,您可以记录源文件和文档的历史记录。老牌的版本控制系统,它是基于客户端/服务器的行为使得其可容纳多用户,构成网络也很方便。这一特性使得CVS成为位于不同地点的人同时处理数据文件(特别是程序的源代码)时的首选。
官方网站:http://www.nongnu.org/cvs/
官方文档:https://web.archive.org/web/20140629065005/http://ximbiot.com/cvs/manual/cvs-1.11.23/cvs.html
下载地址:https://ftp.gnu.org/non-gnu/cvs/

优势:

  1. 更轻松的管理。传统的版本控制系统使用集中式的 repository,一些和repository相关的管理就只能由管理员一个人进行。由于采用了分布式的模型,Mercurial 中就没有这样的困扰,每个用户管理自己的 repository,管理员只需协调同步这些repository。
  2. 更健壮的系统。分布式系统比集中式的单服务器系统更健壮,单服务器系统一旦服务器出现问题整个系统就不能运行了,分布式系统通常不会因为一两个节点而受到影响。
  3. 对网络的依赖性更低。由于同步可以放在任意时刻进行,Mercurial 甚至可以离线进行管理,只需在有网络连接时同步。

版本控制工具的可视化客户端

  1. Gitkraken

轻松使用托管在GitHub,GitLab,Bitbucket,Azure DevOps(VSTS)这些站点上的存储库。GitKraken都可克隆,添加分支,创建/打开拉取请求。
官网:https://www.gitkraken.com/

特点:

  1. 直观的UI
  2. 内置代码编辑器:初始化一个全新的项目并使用内置代码编辑器添加新文件和文件夹,并直接在GitKraken中编辑它们。保存文件,暂存和提交更改。没有更多上下文切换!
  3. 任务跟踪:将Glo Board连接到GitKraken中的存储库。当您在任务上取得进展时,可以快速更新代码的相关问题,然后重新开始编码。2.Tower

官网:https://www.git-tower.com

Tower的优点

  1. 便于使用:无需记住复杂的命令(及其参数)。Tower使许多高级操作像拖放一样简单。

  2. 撤消一切的功能:包括撤消本地更改,恢复旧版本,还原提交,恢复已删除的提交,撤消分支删除

  3. 清晰的可视化,更好的理解:Tower的清晰视觉界面非常有用 - 并且使复杂场景更容易理解。

  4. 优雅地使用Git:以简单,直观的方式解决合并冲突,不需要SSH密钥,用户名,密码和身份验证令牌进行验证

  5. Sourcetree

简介:适用于Windows和Mac的免费Git客户端
Sourcetree简化了与Git存储库交互的方式,通过Sourcetree的简单Git GUI可视化和管理存储库
官网:https://www.sourcetreeapp.com/

二、GIT安装与命令安装

一、安装

由于本人主要是在windows下开发,因此这里只讲windows下git的安装(Linux、Unix和Mac下的git安装这里不列举)。

1)官网下载:Git - Downloads
2)双击运行exe,一直默认安装即可(也可以修改安装路径);
安装完成之后,鼠标右键可以看见,多了几个选项:
在这里插入图片描述
Git GUI Here这个主要是git的图形窗口(一般不用,会安装TortoiseGit使用);Git Bash Here主要是命令行,如下
在这里插入图片描述

说明git安装成功

二、工作流程

1)从远程仓库 clone git资源作为本地仓库;

2)从本地仓库中 checkout 代码接着进行修改;

3)提交代码前将代码 add 提交到暂存区;

4)commit 提交修改(提交到本地仓库,保存修改的各个历史版本);

5)修改完成,需要共享代码时, push 到远程仓库。

如下图:
在这里插入图片描述

工作区:在本地能看到的目录就是一个工作区

暂存区:.git目录下的index文件(.git/index)中,也叫索引

三、git管理文件版本

3.1 创建版本库
版本库可以简单的理解为一个目录,这个目录里面的所有文件可以被Git管理,每个文件的修改、删除等git都可以跟踪其历史。

git仓库是存在一个.git的文件夹的,该文件夹是隐藏的,若没有设置显示隐藏文件夹,用户是看不见该文件夹的,用户可以通过命令行 git init创建.git文件夹,直接创建或者右键点击"TortoiseGit在这里创建版本库"(弹出窗口不要勾选"制作纯版本库(没有工作目录)",若选中的话,那创建的版本库是没有工作目录的,即不能把文件加到本地仓库),包含.git文件夹的目录称为工作目录。

git会自动创建一个master分支,以及执行master的一个指针HEAD。

四、命令

1)init

——初始化git仓库

git init //初始化git仓库
git init project //在project目下下初始化git仓库
2)add

——将文件加入版本控制

git add readme.txt //将readme.txt提交到仓库
3)clone

——从现有git仓库中拷贝项目

git clone https//test.git test //将test.git仓库的内容拷贝到test目录下
4)config

——设置命令

git config --list //显示当前git配置信息
git config -e //针对当前仓库设置
git config -e --global //针对系统上所有仓库
5)status

——查看仓库当前状态,显示由变更的文件

git status
git status -s //获取简短的内容
6)diff

——比较文件的不同,暂存区和工作区的不同

git diff [filename] //尚未缓存的改动
git diff --cached [filename] //查看已缓存的改动
git diff --staged [filename]
git diff HEAD //查看已缓存的与未缓存的所有改动
git diff --stat //显示摘要而非整个diff
git diff [first-branch] [second-branch] //显示2次提交之间的差异
7)commit

——提交暂存区到本地仓库

git commit -m [message] //提交
git commit [file1] … [fileN] //提交指定文件到仓库区
git commit -a //无需执行git add,直接提交
8)reset

——回退版本,可指定退回某一次提交的版本

git reset [–soft | --mixed | --hard] [HEAD]
–mixed是默认的,可不带该参数,用于重置暂存区的文件与上次的提交保持一致,工作区文件内容保持不变。

git reset HEAD~1 //回退所有内容到上一个版本
git reset HEAD readme.txt //回退readme.txt文件的版本到上一个版本
git reset xxx //回退到指定版本
–soft参数用于回退到某个版本

git reset --soft HEAD~3 //回退到前3个版本
–hard参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交:(注意:会删除回退点之前的所有信息)

git reset --hard HEAD~3 //回退到前3个版本
git reset --hard xxxx //回退到某个版本回退点之前的所有信息
git reset --hard origin/master //将本地的状态回退到和远程的一样
9)rm

——删除工作区文件

git rm [file] //将文件从暂存区和工作区中删除
git rm -f [file] //删除之前修改过且已放到暂存区,需使用强制删除选项 -f
git rm --cached [file] //将文件从暂存区移除,保留在当前工作目录
git rm -r * //递归删除,删除该目录下的所有文件和子目录
10)mv

——移动或重命名工作区文件

git mv [file] [newfile] //移动或重命名一个文件、目录或软链接
git mv -f [file] [newfile] //newfile存在,需强制执行
11)log

——查看历史提交记录

git log //查看历史提交记录
git log --online //查看历史记录的简洁版本
git log --graph //查看历史中出现分支、合并的时间
git log --reverse //逆向显示所有日志
git log --author //查看指定用户提交的日志
git log --before(–since)={3.week.ago} --after(–until)={2021-07-25} //查看3周前且在2021-07-25后的所有提交日志
git log --no-merges //隐藏合并提交
12)blame

——查看指定文件的修改记录,以列表形式显示

git blame [file]
13)remote

——远程仓库操作

git remote -v //显示所有远程仓库
git remote show [remote] //显示某个远程仓库的信息
git remote add [shortname] [url] //添加远程版本库
git remote rm name //删除远程仓库
git remote rename old_name new_name //修改仓库名
若本地git仓库和github之间的传输是通过SSH加密的,需要配置验证信息:

首先生成SSH Key;

在~/下生成.ssh文件夹,打开id_rsa.pub,拷贝其中的key值;

14)fetch

——从远程获取代码库,该命令执行完需执行git merge远程分支到所在的分支

git merge //从远端仓库提取数据并尝试合并到当前分支
git fetch [alias] //提取更新的数据
git merge [alias]/[branch] //将远程仓库的任何更新合并到当前分支
15)pull

——下载远程代码并合并,是git fetch和git merge FETCH_HEAD的简写。

git pull [远程主机名] [远程分支名]:[本地分支名] //将远程主机的分支拉取过来与本地的分支合并
若是本地当前分支可省略。

16)push

——上传远程代码并合并

git push [远程主机名] [本地分支名]:[远程分支名]
若本地分支名与远程分支名相同,可省略远程分支名。

git push --force [远程主机名] [本地分支名]:[远程分支名] //本地版本与远程版本有差异,强制推送
git push [远程主机名] --delete [远程分支名] //删除主机对应的分支
17)分支管理

git branch [branchname] //创建分支
git checkout [branchname] //切换分支
git branch //列出分支
git branch -d [branchname] //删除分支
git merge [branchname] //合并branchname到煮分支
18)tag

——标签,可以延后打标签

git tag -a xxx [xxxx] //创建带注解的标签
git tag -a [tagname] -m “xxx” //指定标签信息
git tag -s [tagname] -m “xxx” //PGP签名标签

GitHubDaily 的宗旨是 :将于每日不定时推送一批 GitHub 上优秀的开源项目给开发者, 帮助开发者们发现当下最火的开源项目, 令开发者们得以掌控技术脉搏, 扩大自己的技术视野, 并从开源项目的学习中获得技术能力的提升。传送门:github.com/GitHubDaily/GitHubDaily

三、使用

四、版本控制

五、分支管理

六、Git标签

七、极简Git +VsCode(Windows)

猜你喜欢

转载自blog.csdn.net/SDXYGZH/article/details/126541769
今日推荐