前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Git|GitHub|SSH|Sourcetree 上篇】Git环境搭建及核心概念学习

【Git|GitHub|SSH|Sourcetree 上篇】Git环境搭建及核心概念学习

作者头像
好吃懒洋洋
发布2022-11-15 17:12:02
1.5K0
发布2022-11-15 17:12:02
举报
文章被收录于专栏:个人学习分享

⌚️⌚️⌚️个人格言:时间是亳不留情的,它真使人在自己制造的镜子里照见自己的真相! 📖Git专栏:📑Git篇🔥🔥🔥 📖JavaScript专栏:📑js实用技巧篇,该专栏持续更新中🔥🔥🔥,目的是给大家分享一些常用实用技巧,同时巩固自己的基础,共同进步,欢迎前来交流👀👀👀 👉👉👉你的一键三连是对我的最大支持💙 💜 ❤️

文章目录

✅前言

当下,几乎所有开发者都要接触版本控制系统 ( Version Control System, 简称 VCS ), 这种工具让他们在分工合作时避免了不必要的重复与冲突,如果遇到什么问题,也可以及时回退到之前的版本。当今最流行的版本控制系统(至少在网络开发者中是这样的)是 Git,和与之关联的编程社区网站 GitHubGitee等等。 另外,版本控制系统在软件开发过程中是必不可少的:

  • 我们很少独自完成一个项目,而在分工合作的同时我们都会有与他人的工作相冲突的风险:尤其是当两个人同时尝试修改同一段代码的时候。所以我们需要有相应的机制用以避免这种情况。
  • 在开发一个项目的时候,我们希望能将代码及时保存,这样就可以避免像电脑突然崩溃辛苦全部白费这样的尴尬局面。
  • 如果后期发现了问题,我们可能还会需要退回更早的版本。有的小朋友也许想到可以通过创建一堆 Code_v1.js, Code_v2.js, Code_v3.js, Code_final.js, Code_really_really_final.js 之类的文件用于保存历史版本,但这个方法不妥,容易出错。
  • 不同的团队成员也会需要创建他们自己的独特的版本(在 Git 中叫做branches (分支)),他们在这里添加一些新的功能特性,然后通过一些可控的方法(在 GitHub 中我们使用 pull request (拉取请求))将它们贡献到原来的主干项目中。

版本控制系统提供了能够满足以上需求的工具。Git 是版本控制系统的典范,而 GitHub 是一个为个人或团队操作 Git 储存库 ( Git Repositories) 提供了 Git 服务器和一系列非常实用的工具的网站 + 基础设施。它提供了报告代码错误、检查工具以及分配任务和任务状态等项目管理工具等等。

❗️ ❗️ ❗️本篇短文将带你学习到Git环境搭建Git指令Git-FlowSSH公钥配对以及GitHub远程仓库部署等等

➡️下载安装:Git下载地址,个人推荐使用迅雷下载(亲测,超好用)

⭕️内容

🕐Git三大区初认识

  • Git本地有三个工作区域:
    • 工作目录(Working Directory)
    • 暂存区(Index)
    在这里插入图片描述
    在这里插入图片描述
    • 仓库区(Repository)
    • 另外加上远程的git仓库(Remote Repository)就可以分为四个工作区域,文件在这四个区域之间的转换关系如下:
    在这里插入图片描述
    在这里插入图片描述

🕜Git基本指令

为使用 Git,开发人员使用特定命令来复制、创建、更改和合并代码。 这些命令可以直接从命令行执行,也可以使用 GitHub Desktop等应用程序执行。 以下是使用 Git 的一些常用命令(其中会有一些演示操作,注意文件目录变化):

  • 配置用户信息
代码语言:javascript
复制
$ git config --global user.name "Your Name"             
$ git config --global user.email "youremail@163.com"

该指令可以进行覆盖操作,git config演示:

在这里插入图片描述
在这里插入图片描述

另外,输入git log可看到你的用户信息(即提交作者),前提时有提交记录

在这里插入图片描述
在这里插入图片描述
  • git init 初始化一个全新的 Git 存储库并开始跟踪现有目录。 它在现有目录中添加一个隐藏的子文件夹,所以这里我们需要按下面操作使其显现,该子文件夹包含版本控制所需的内部数据结构。
在这里插入图片描述
在这里插入图片描述

git init 演示:

在这里插入图片描述
在这里插入图片描述
  • git clone 创建远程已存在的项目的本地副本。 克隆包括项目的所有文件、历史记录和分支。
  • git add 暂存更改。 Git 跟踪对开发人员代码库的更改,但有必要暂存更改并拍摄更改的快照,以将其包含在项目的历史记录中。 此命令执行暂存,即该两步过程的第一部分。 暂存的任何更改都将成为下一个快照的一部分,并成为项目历史记录的一部分。 通过单独暂存和提交,开发人员可以完全控制其项目的历史记录,而无需更改其编码和工作方式。
  • git commit 将快照保存到项目历史记录中并完成更改跟踪过程。 简言之,提交就像拍照一样。 任何使用 git add 暂存的内容都将成为使用 git commit 的快照的一部分。

📌Note:git commit -m "commit message",提交时按该指令进行提交

  • git status 将更改的状态显示为未跟踪、已修改或已暂存。

git-status-add-commit-log 演示 :

在这里插入图片描述
在这里插入图片描述

📌Note: 一张图带你加深对commitlog理解

在这里插入图片描述
在这里插入图片描述
  • git branch 显示正在本地处理的分支。
  • git merge 将开发线合并在一起。 此命令通常用于合并在两个不同分支上所做的更改。 例如,当开发人员想要将功能分支中的更改合并到主分支以进行部署时,他们会合并。
  • git pull 使用远程对应项的更新来更新本地开发线。 如果队友已向远程上的分支进行了提交,并且他们希望将这些更改反映到其本地环境中,则开发人员将使用此命令。
  • git push 使用本地对分支所做的任何提交来更新远程存储库。

📌Note: 一个按键小技巧分享给大家

在这里插入图片描述
在这里插入图片描述

以上均为git最最常用指令,如果是第一次接触git,可能此时脑袋已经懵了,但千万不要着急,上面的统统不需要背,忘记时查询即可;此外,下面还有比较常用到的指令大全;最后,如要继续学习其它指令,可到git官方网站查询

📢📢📢最最重要的来了:本文后续操作都在Visual Studio Code编译器中进行,即将git init的文件夹用该编译器打开

🕙git 常用命令

◻️仓库

在当前目录新建一个Git代码库

代码语言:javascript
复制
$ git init

新建一个目录,将其初始化为Git代码库

代码语言:javascript
复制
$ git init [project-name]

下载一个项目和它的整个代码历史

代码语言:javascript
复制
$ git clone [url]

◻️增加/删除文件

添加指定文件到暂存区

代码语言:javascript
复制
$ git add [file1] [file2] ...

添加指定目录到暂存区,包括子目录

代码语言:javascript
复制
$ git add [dir]

添加当前目录的所有文件到暂存区

代码语言:javascript
复制
$ git add .

添加每个变化前,都会要求确认 对于同一个文件的多处变化,可以实现分次提交

代码语言:javascript
复制
$ git add -p

删除工作区文件,并且将这次删除放入暂存区

代码语言:javascript
复制
$ git rm [file1] [file2] ...

停止追踪指定文件,但该文件会保留在工作区

代码语言:javascript
复制
$ git rm --cached [file]

◻️代码提交

提交暂存区到仓库区

代码语言:javascript
复制
$ git commit -m [message]  “message”在引号内

提交工作区自上次commit之后的变化,直接到仓库区

代码语言:javascript
复制
$ git commit -a

提交时显示所有diff信息

代码语言:javascript
复制
$ git commit -v

◻️查看信息

显示有变更的文件

代码语言:javascript
复制
$ git status

显示当前分支的版本历史

代码语言:javascript
复制
$ git log

搜索提交历史,根据关键词

代码语言:javascript
复制
$ git log -S [keyword]

显示某个文件的版本历史,包括文件改名

代码语言:javascript
复制
$ git log --follow [file]

显示指定文件相关的每一次diff

代码语言:javascript
复制
$ git log -p [file]

显示工作区与当前分支最新commit之间的差异

代码语言:javascript
复制
$ git diff HEAD

显示两次提交之间的差异

代码语言:javascript
复制
$ git diff [first-branch]...[second-branch]

显示今天你写了多少行代码

代码语言:javascript
复制
$ git diff --shortstat "@{0 day ago}"

显示某次提交的元数据和内容变化

代码语言:javascript
复制
$ git show [commit]

显示当前分支的最近几次提交

代码语言:javascript
复制
$ git reflog

◻️分支

列出所有本地分支

代码语言:javascript
复制
$ git branch

列出所有远程分支

代码语言:javascript
复制
$ git branch -r

列出所有本地分支和远程分支

代码语言:javascript
复制
$ git branch -a

建立分支:

新建一个分支,但依然停留在当前分支

代码语言:javascript
复制
$ git branch [branch-name]

新建一个分支,并切换到该分支

代码语言:javascript
复制
$ git checkout -b [branch]

新建一个分支,指向指定commit

代码语言:javascript
复制
$ git branch [branch] [commit]

切换到指定分支,并更新工作区

代码语言:javascript
复制
$ git checkout [branch-name]

切换到上一个分支

代码语言:javascript
复制
$ git checkout -

合并指定分支到当前分支

代码语言:javascript
复制
$ git merge [branch]

选择一个commit,合并进当前分支

代码语言:javascript
复制
$ git cherry-pick [commit]

删除分支

代码语言:javascript
复制
$ git branch -d [branch-name]

◻️标签

列出所有tag

代码语言:javascript
复制
$ git tag

新建一个tag在当前commit

代码语言:javascript
复制
$ git tag [tag]

新建一个tag在指定commit

代码语言:javascript
复制
$ git tag [tag] [commit]

删除本地tag

代码语言:javascript
复制
$ git tag -d [tag]

查看tag信息

代码语言:javascript
复制
$ git show [tag]

提交指定tag

代码语言:javascript
复制
$ git push [remote] [tag]

提交所有tag

代码语言:javascript
复制
$ git push [remote] --tags

◻️远程同步

下载远程仓库的所有变动

代码语言:javascript
复制
$ git fetch [remote]

显示所有远程仓库

代码语言:javascript
复制
$ git remote -v

显示某个远程仓库的信息

代码语言:javascript
复制
$ git remote show [remote]

增加一个新的远程仓库,并命名

代码语言:javascript
复制
$ git remote add [shortname] [url]

拉取请求(pull request):

取回远程仓库的变化,并与本地分支合并

代码语言:javascript
复制
$ git pull [remote] [branch]   //远程仓库remote默认名为 origin相当于一个指针指向改地址

允许不相关历史提交,并强制合并

代码语言:javascript
复制
$ git pull origin master --allow-unrelated-histories

推送给remote repository:

上传本地指定分支到远程仓库

代码语言:javascript
复制
$ git push [remote] [branch]   //远程仓库remote默认名为 origin

强行推送当前分支到远程仓库,即使有冲突

代码语言:javascript
复制
$ git push [remote] --force

推送所有分支到远程仓库

代码语言:javascript
复制
$ git push [remote] --all

◻️撤销

恢复暂存区的指定文件到工作区

代码语言:javascript
复制
$ git checkout [file]

恢复某个commit的指定文件到暂存区和工作区

代码语言:javascript
复制
$ git checkout [commit] [file]

恢复暂存区的所有文件到工作区

代码语言:javascript
复制
$ git checkout .

重置命令:

重置暂存区的指定文件,与上一次commit保持一致,但工作区不变

代码语言:javascript
复制
$ git reset [file]

重置暂存区与工作区,与上一次commit保持一致

代码语言:javascript
复制
$ git reset --hard 

重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变

代码语言:javascript
复制
$ git reset [commit]

重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致

代码语言:javascript
复制
$ git reset --hard [commit]

重置当前HEAD为指定commit,但保持暂存区和工作区不变

代码语言:javascript
复制
$ git reset --keep [commit]

🕥 忽略文件配置(.gitignore)

首先,看到这个名字,肯定会有疑惑什么是.gitignore文件?gitignore文件的用途是什么?

首先,我们要清楚当前运行的Git存储库中的每个文件都有以下状态之一:

  • tracked:这些是Git所知道的所有文件或目录。这些是新暂存(用 git add 添加的)和提交(用 git commit 提交的)到主仓库的文件和目录。
  • untracked:这些是在工作目录中创建的任何新文件或目录,但还没有暂存(或使用git add命令添加)。
  • ignored:这些是Git在Git存储库中完全排除、忽略和不知道的所有文件或目录。从本质上说,这是一种告诉Git哪些未跟踪的文件应该保持不跟踪且永远不提交的方式。

所有被忽略的文件都被放置在 .gitignore 文件里。.gitignore 文件是一个纯文本文件,它包含来自项目的所有指定文件和文件夹的列表,Git应该忽略和不跟踪这些文件和文件夹。在 .gitignore 内部,您可以通过提到特定文件或文件夹的名称或模式,告诉Git只忽略单个文件或文件夹。您还可以使用相同的方法告诉Git忽略多个文件或文件夹。

  • 配置语法:
    • 以斜杠“/”开头表示目录;
    • 以星号“*”通配多个字符;
    • 以问号“?”通配单个字符;
    • 以方括号“[]”包含单个字符的匹配列表;
    • 以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;

示例

解释

# 此为注释

表示注释, 将被忽略

或/

*代表所有,即忽略.gitignore所在根目录下所有文件

*.html

忽略所有后缀名为.html的文件

file1/*

忽略 file1下面的所有文件

file1/*.css

会忽略 file1/ 目录内的所有后缀名为.css的文件, 但不包括子目录的

!.js

不忽略所有后缀名为.js的文件

Note:git 对于 .gitignore 配置文件时是按行从上到下进行规则匹配的,即如果上面的配置范围较大时,下面的配置可能无效

下面为可能无效原因:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

🕖分支创建、合并、合并冲突

  • 分支简介

为了真正理解 Git 处理分支的方式,我们需要回顾一下 Git 是如何保存数据的。或许你还记得起步的内容, Git 保存的不是文件的变化或者差异,而是一系列不同时刻的 快照

在进行提交操作时,Git 会保存一个提交对象(commit object)。 知道了 Git 保存数据的方式,我们可以很自然的想到——该提交对象会包含一个指向暂存内容快照的指针。 但不仅仅是这样,该提交对象还包含了作者的姓名和邮箱、提交时输入的信息以及指向它的父对象的指针。 首次提交产生的提交对象没有父对象,普通提交操作产生的提交对象有一个父对象, 而由多个分支合并产生的提交对象有多个父对象

在这里插入图片描述
在这里插入图片描述

📌Note: Git 的 master 分支并不是一个特殊分支。 它就跟其它分支完全没有区别。 之所以几乎每一个仓库都有 master 分支,是因为 git init 命令默认创建它,并且大多数人都懒得去改动它。

  • 分支合并冲突问题

当分支merge时,如果分支A的某个文件只是在分支B的该文件上进行了一些修改,当这两个分支合并时,便会出现以下情况,此时我们进入了另一个页面,相当于时对这次合并出现的分支conflict进行处理

图1:

在这里插入图片描述
在这里插入图片描述

该页面我们只需要在图中step1中输入该冲突的备注信息,相当于前文当中commit是的“commit message”

图2:

在这里插入图片描述
在这里插入图片描述

此时是在VScode编译器中解决具体冲突

🔳总结

好的,上篇就介绍到这里,内容可能有点多,但概念还是比较简单,下篇我们将带来GitHub、Sourcetree、SSH以及Git-flow工作流等知识,敬请期待,byebye👋👋👋

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • ✅前言
  • ⭕️内容
    • 🕐Git三大区初认识
      • 🕜Git基本指令
        • 🕙git 常用命令
          • ◻️仓库
          • ◻️增加/删除文件
          • ◻️代码提交
          • ◻️查看信息
          • ◻️分支
          • ◻️标签
          • ◻️远程同步
          • ◻️撤销
        • 🕥 忽略文件配置(.gitignore)
          • 🕖分支创建、合并、合并冲突
          • 🔳总结
          相关产品与服务
          项目管理
          CODING 项目管理(CODING Project Management,CODING-PM)工具包含迭代管理、需求管理、任务管理、缺陷管理、文件/wiki 等功能,适用于研发团队进行项目管理或敏捷开发实践。结合敏捷研发理念,帮助您对产品进行迭代规划,让每个迭代中的需求、任务、缺陷无障碍沟通流转, 让项目开发过程风险可控,达到可持续性快速迭代。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档