Git 基础知识大全

Git 基础知识大全

文章目录

  • Git 基础知识大全
    • 1. 原理
    • 2. 配置文件
    • 3. 基本操作
    • 4. 远程操作
    • 5. 删除操作
    • 6. 检出操作
    • 7. 分支操作
    • 8. 日志
    • 9. 比对文件
    • 10. 忽略文件
    • 11. 多人协同开发
    • 12. 标签
    • 13. GitHub

1. 原理

Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理。

git底层采用的是SHA-1校验,保证提交的正确性,文件内容以及文件、目录、版本、标签和提交的关联,都通过安全的加密哈希校验算法(SHA1)保护。这可以避免代码和修改历史被不小心或者恶意改变,并且保证修改历史完全可追迹。

git基于多种传输协议,为了数据传输安全最常用的就是https和ssh,设置ssh密钥的目的是为了节省输入用户名密码的过程,同时保证传输安全,并不是必须设置。

Git不只提取最新版的文件快照,而是把代码仓库完整的镜像下来

  1. 版本回溯到过去某个时间点状态
  2. 比较文件变化细节,查看谁修改了哪个地方

Git 保存的不是文件的变化或者差异,而是一系列不同时刻的 快照 形成索引 。如果下次文件的内容未发生变化就会产生指针对上一次文件进行指向,内容发生变化后才会重新保存,称为快照流,各个版本之间形成的历史记录也就是每次快照之间指针指向的父子关系(链表形式)

2. 配置文件

# 查看版本
git --version

Git 的配置文件在用户主目录下的一个隐藏文件.gitconfig

通常情况下,每台计算机上只需要配置一次 Git,当 Git 程序升级时会保留配置信息。 可以在任何时候再次通过运行 git config命令来修改它们。

git config [param] 项目仓库级别配置

git config --global [param] 当前系统用户级别配置,配置文件在user文件夹下

param参数如下

user.name "天宇龙腾"
user.email [email protected]

让 Git 显示不同的颜色,会让命令输出看起来更醒目

git config --global color.ui true

配置命令别名

git config --global alias.st status

git config --global alias.last 'log -1'

cd ~回到用户目录下

3. 基本操作

  • 初始化 git 仓库,用于创建空的中央仓库,初始化.git文件夹及其内容,方便其它开发者 clone ,开发者本身一般不会使用
git init
  • 下载仓库副本 (设定深度版本,只下载最后更新的一次版本)
git clone <url> (--depth 1)   
  • 对当前目录中修改的文件添加进缓存区,git 开始对文件进行跟踪
git add .
  • 提交到本地库
git commit -m "message"
  • 查看当前仓库工作目录和缓存区状态,显示当前进展
git status
# 将暂存区的文件推送至远程仓库
# 使用强制推送'-f'是因为一般新建仓库的时候会生成Readme.md文件,导致需要先git fetch才能推送,但这个readme文件其实是不需要的
# 因为在生成本地项目的时候一般也会生成一个readme文件,所以直接强制推送过去
git push origin master -f

有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选项的提交命令来重新提交

git commit --amend

4. 远程操作

# 列出远程连接
git remote -v
# 如果你还没有克隆现有仓库,并欲将你的仓库连接到某个远程服务器(连接git远程仓库)
# origin 是远程仓库地址的别名,取什么名字都可以,你也可以在 push 时将你喜欢的名字替换origin
git remote add origin <url>
# 删除某个远程连接
git remote rm <name>
# 重命名别名
git remote rename <old-name> <new-name>

远程仓库与本地仓库这两个独立仓库想要初次建立完毕想要进行合并时,先在本地初始化连接远程完毕后拉一下远程库,并合并一下两个独立仓库的历史

git pull origin master --allow-unrelated-histories
git push origin master:master

5. 删除操作

  • 从版本库中删除文件
git rm <filename>
  • 从版本库删除文件,但是本地不删除文件
git rm --cached <filename>
  • 忽略文件

通过.gitignore文件屏蔽某些不必要上传的文件

  • 忽略某一类的文件
*.txt

6. 检出操作

  • 查看版本中文件所发生的变动
git checkout <hashIndex> <filename>

7. 分支操作

git中创建新分支,类似于新建一个指针,切换分支就是将HEAD指针指向另一个分支

Git Flow 分支种类

master 主干分支

develop 开发分支

hotfix 修复分支

release 准生产分支(预发布分支)

feature 功能分支

  • 查看当前项目所有的分支
git branch -v
  • 合并分支
  1. 切换分支到master主分支
git checkout master
  1. 对所需dev分支进行合并
git merge dev
  • 删除未合并分支
git branch -D <name> 
  • 删除已合并分支
git branch -d <name>
  • 查看远程库信息
git remote -v

8. 日志

  • 显示日志,控制台出现 : 表示多页展示,space向下翻页,B向上翻页,Q退出
git log
  • 显示漂亮日志(单行简洁日志,全部索引展示)
git log --pretty=oneline
  • 显示漂亮日志(截取部分索引展示)
git log --oneline
  • 显示HEAD@{N}指针移动步数(截取部分索引展示)
git reflog
  • 基于reflog显示的"索引值"进行版本回退
git reset --hard <hashIndex>
  • 只能回退的两种办法^ ~
git reset --hard HEAD^^^

git reset --hard HEAD~3

hard是硬回退,工作区、暂存区与本地库都会进行回退(用的最多)
mixed 暂存区、本地库会进行回退,工作区不动
soft 本地库会进行回退,工作区、暂存区不动

9. 比对文件

git 以行为单位做对比,改动时为删除一行,增加一行
比对工作区与暂存区内容

比对单个文件差异
git diff xxx.file

比对所有文件差异
git diff

比对暂存区与本地库的差异

git diff HEAD xxx.file

10. 忽略文件

有时某些文件必须放于git工作目录中但是不选择提交,使用.gitignore文件进行忽略追踪

忽略文件的原则是:

  1. 忽略操作系统自动生成的文件,比如缩略图等;
  2. 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
  3. 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
# 排除所有.开头的隐藏文件:
.*
# 排除所有.class文件:
*.class
# 排除相应文件夹文件:
dictionary

# 添加例外规则 !+文件名,不排除.gitignore和App.class:
!.gitignore
!App.class

检查相应忽略文件的规则,便于修改.gitignore文件规则

git check-ignore -v App.class

强制添加被忽略的某一个文件

git add -f App.class

git再次忽略某个文件后同步github更新,首先,删除本地缓存。

git rm -r --cached dir #要删除的目录m

然后,提交修改。

git push

11. 多人协同开发

非本组织团队对远程仓库进行协同工作时需要先 fork 到复制一份到自己的仓库,再clone下来,编写完毕后向远程仓库发起 pull request请求,由远程仓库管理员审核后进行 merge 合并操作

  • 远程库抓取(不改变本地库,需要自己做合并操作)
git fetch origin master
  • 切换到远程分支查看
git checkout origin/master
  • 使本地库与远程库合并
git merge origin/master
  • 从远程库更新本地库(pull = fetch + merge)
git fetch
git pull

12. 标签

发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。

由于commit号过于繁琐,所以自定义一个标签名便于查找,所以,tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。

# 选择一个分支
git branch

git checkout master

# 打标签
git tag v1.0
# 对指定的commit id打标签(使用git log查出)
git tag v0.9 fb8b190
# 查询标签
git tag
# 查看指定标签信息
git show v0.9


# 删除标签
git tag -d v0.1


# 推送指定标签到远程库
git push origin v1.0
# 一次性推送全部本地标签
git push origin --tags

13. GitHub

github1s

https://gitpod.io/#/xxx

git clone https://github.com/...
git clone https://github.com.cnpmjs.org/...更换镜像加快速度
--depth 1按深度拿最近一次更新的

在仓库中按 可直接跳转到VScode中

你可能感兴趣的:(Git,1024程序员节,git,github)