Git原理和命令实战

本文介绍Git原理,核心概念和工作中的命令行实战,将会对Git有较为全面的了解。

Git 与SVN

SVN

SVN属于集中式的版本控制系统,而集中式的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版
本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
SVN中,每个子目录下都维护着自己的.svn目录,记录着该目录中文件的修改情况以及和服务器端仓库的对应关系。SVN可以checkout部分路径下的内容(部分检出),而不用checkout整个版本库或分支。
本质上SVN的分支和标签都是来自目录拷贝,通常约定是拷贝在 branches/和tags/目录下。所谓分支、tag等概念都只是仓库中不同路径上的一个对象或索引而已。

Git

GIT: 分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库, 意味着任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。
Git 没有部分检出,并且git的本地仓库信息完全维护在project根目录的.git目录下,(不像svn一样,每个子目录下都有单独的.svn目录)。
Git中的分支实际上仅是一个包含所指对象校验和(40个字符长度SHA-1 哈希值)的文件。Git的分支是完全隔离的,一个提交一般只能发生在一个分支中。

Git核心概念

4个区

相比于SVN等传统的版本管理工具,Git多引入了一个暂存区(Stage)的概念:
• Workspace:工作区,为电脑中实际的目录
• Index / Stage:暂存区,类似于缓存区域,临时保存你的改动。
• Local Repository:仓库区(或本地仓库),在.git目录下。
• Remote Repository:远程仓库。

在这里插入图片描述

3个步骤

正常情况下,我们的工作流就是3个步骤:
在这里插入图片描述

  1. git add .把所有文件放入暂存区;
  2. git commit把所有文件从暂存区提交进本地仓库;
  3. git push把所有文件从本地仓库推送进远程仓库。

5种状态

Git对应的4个区,进入每一个区成功之后会产生一个状态,再加上最初始的一个状态,一共是5种状态:

  • 未修改(Origin)
  • 已修改(Modified)&未追踪(Untracked)
  • 已暂存(Staged)
  • 已提交(Committed)
  • 已推送(Pushed)

Git环境搭建实战

  1. 下载安装Git:根据你的系统选择合适的版本,下载安装包并进行安装。yum install -y git,淘宝镜像:https://npm.taobao.org/mirrors/git-for-windows/

  2. 配置用户信息:打开命令行终端,输入以下指令,分别配置用户名和邮箱:

    git config --global user.name "Your Name"
    git config --global user.email "youremail@example.com"
    
  3. 创建本地仓库:在你的本地文件夹中创建一个新文件夹,并cd进入这个文件夹,然后使用以下指令将其初始化为GIT仓库:

    git init
    
  4. 添加远程仓库:使用以下指令添加远程仓库(如果有的话):

    git remote add origin remote_repository_URL
    
  5. 创建、编辑、保存、提交文件修改:将文件拷贝到本地仓库目录下,然后使用以下指令将其加入暂存区:

    git add file_name
    

    然后使用以下指令将其提交到本地仓库:

    git commit -m "Commit message"
    
  6. 同步代码到远程仓库:使用以下指令将本地代码同步到远程仓库:

    git push origin master
    

以上信息在远程仓库初次创建时都会出现提示信息,按照步骤操作即可

Git、GitLab、GitHub

Git是一款分布式版本控制工具,用于记录代码的历史版本和管理多人协作开发。
GitLab是一款基于Git的开源在线版本控制系统,它提供了一系列完整的工具,包括源代码管理、代码审查、问题追踪、持续集成和部署等功能。
GitHub则是一个基于Git的代码托管平台,它允许用户将自己的代码上传到互联网上,供其他人查看、下载和使用。除了GitLab的功能以外,GitHub还提供了社交化的功能,如关注、点赞和评论等。
简单来说,Git是版本控制工具,GitLab和GitHub是在Git基础上搭建的在线版本控制平台,GitHub重点在社交化方面。

同一台电脑配置多个git账号

在同一台电脑上配置多个 Git 账号的方法如下:

  1. 生成新的 ssh 公钥

首先需要生成一对新的 ssh 公钥和私钥,用于认证使用。可以在默认的 ~/.ssh/ 目录下生成,或者在生成时指定新的目录。

ssh-keygen -t rsa -C "new_email@example.com" -f ~/.ssh/id_rsa_personal

命令中 -C 参数是注释,用于说明该 ssh key 是用于哪个账号的。-f 参数指定生成的 ssh key 文件名和路径。

  1. 配置 ssh

~/.ssh/ 目录下创建一个名为 config 的文件,并在其中添加如下配置,其中新生成的 ssh key 对应的 Host 和 IdentityFile 值需要修改成自己的。

# default GitHub account
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa

# personal account
Host github.com-personal
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa_personal
  1. 配置 Git

(1)全局设定

在 Git 中设置默认用户名和邮箱地址:

git config --global user.name "your_username"
git config --global user.email "your_email"

(2)针对单个项目

在某个项目的根目录下,执行以下命令:

git config user.name "your_username"
git config user.email "your_email"
  1. 在本地 clone 仓库

使用新增的 ssh 地址(例如 git@github.com-personal:username/repo.git)来 clone 对应账号下的仓库即可。

注意:根据不同的 git 服务商,ssh 地址可能有所不同,需要修改为对应的地址。

Git常用分支方式和适用场景

  1. 主分支模式(mainstream model):所有的开发者都在一个主分支上共同开发和维护软件。适用于小型团队或个人项目。
  2. 功能分支模式(feature branch model):每个功能开发都在自己的分支上,等功能开发完成后再由管理员合并到主分支中。适用于多人协作、复杂项目。
  3. Gitflow工作流:类似于功能分支模式,但是细节更加明确:有master、develop、feature、release、hotfix五种类型的分支,适用于大规模复杂软件开发。

以下是Gitflow工作流常用工作流程。

  1. 根据需求,从master拉出新分支,不区分功能分支或补丁分支。
  2. 新分支开发完成后,或者需要讨论的时候,就向master发起一个Pull request(简称PR)。
  3. Pull Request既是一个通知,让别人注意到你的请求,又是一种对话机制,大家一起评审和讨论你的代码,对你还可以不断提交代码。
  4. 你的Pull Request被接受,合并进master,重新部署后,原来你拉出来的那个分支就被删除。

Git核心命令总结

命令说明
git add *添加到暂存区
git commit -m “commit的信息”提交到本地仓库
git push提交到远端
git fetch获取远程仓库的更新
git pull获取远程仓库的更新并直接合并
git merge/git rebase合并分支到本地分支
git init旧的git远程连接不用了,建立新的链接可以使用该命令
git remote add origin git@github.com:tianqixin/runoob-git-test.git和远端仓库进行关联,先在远端建立一个空的仓库
git checkout切换分支
git rm --cached取消在暂存区保存,针对add错的情况
git commit --amend备注信息要求规范严格,可以通过该命令改备注
git log --author可以查看提交的信息,也可以到远程仓库去看
git remote -v,git remote show origin查看远程仓库和本地仓库的关联信息
git stash,git stash pop突然有新的需求过来,在本地暂时保存起来 git stash pop把之前的恢复了,突然有新需求的时候适合这种情况,可以先stash这个分支的变更,然后切换到新的分支,提交需求之后,恢复到这个分支,然后恢复stash,继续编辑。相比于把文件放到工作区,这样做的好处是方便用git管理。
认证ssh-keygen -t rsa -C ‘438234767@qq.com’ -f ~/.ssh/test_rsa,产生ssh方式的密钥,流水线中常用该方式

本地计算机与GitHub(或GitLab)进行通信时,传输主要基于两种协议,HTTPS和SSH,对应的仓库地址就是HTTPS URLs和SSH URLs。
1、HTTPS URLs
GitHub官方推荐采用HTTPS URLs的方式,因为该种方式适用面更广(即使在有防火墙或代理的情况下也同样适用),使用更方
便(配置更简单)。
2、SSH URLs
除了HTTPS URLs,还可以采用SSH URLs的方式访问GitHub代码仓库,采用SSH URLs方式之前,需要先在本地计算机中生成SSH keypair(秘钥对,包括私钥和公钥)。默认情况下,生成的秘钥位于$HOME/.ssh/目录中,文件名称分别为id_rsa和id_rsa.pub,通常无需修改,保持默认即可。

工作中有时可能错误提交,这时候撤销的操作可以忙上大忙,以下为常见几种撤销操作:

命令说明
git reset --hard已修改,未暂存/已暂存,未提交
git reset --hard HEAD^已提交,未推送
git reset --hard HEAD^,git push origin master -f已推送,先撤回提交后,在force push撤销后修改的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值