Git工作原理及常用命令

Git工作原理及常用命令

欧怼怼
发布于 2020-12-08

git介绍

git(读音/ɡɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。

git保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照。在进行提交操作时,git回报纯一个提交对象(commit object)。该提交对象会包含一个指向暂存内容快照的指针。但不仅仅是这样,该提交对象还包含作者的姓名和邮箱、提交时输入的信息以及指向它的父对象的指针。

git安装及配置

安装

Linux
sudo yum install git
Mac
# 需要先安装homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

# 安装git
brew install git
Win

直接从官网下载安装。

配置

# 配置昵称
git config --global user.name "userName"

# 配置邮箱
git config --global user.email "userEmail"

git存储

git分区

git存储分为四个部分:

  • workspace:工作空间

    • 我们开发代码的目录
  • index:暂存区

    • .git 目录下的index 文件
  • repository:本地仓库

    • 通过git clone 将远程的代码下载到本地,代码库的元数据信息在根目录下的.git 目录下
  • remote:远程仓库

    • 比如github 、gitlab 等远程仓库

1599458527825-5d2a015c-bf70-4b18-8ba5-c4b7b1149395

  • 工作区 —git add —> 暂存区 —git commit —> 本地仓库 —git push —> 远程仓库
  • 远程仓库 —git fetch —> 拉取最新代码至本地仓库,并使用refs/remotes路径下对应分支文件,记录远程分支末端commit_id —git merge —> 工作区
  • 远程仓库 —git pull —> 拉取最新代码至本地仓库,并自动合并代码至工作区,且使用refs/remotes路径下对应分支文件,记录远程分支末端commit_id
git fetch 和 git pull

git fetch 是将远程主机的最新内容拉取到本地,需要用户检查代码以后决定是否合并到工作本机分支中。

具体操作如下:

# 本地新建一个template分支,并将远程origin仓库的master分支代码下载到本地template分支
git fetch origin master:template

# 比较远程代码与本地代码的区别
git diff

# 将temp分支合并到本地master分支
git merge temp

# 不想保留分支,可以将其删除
git branch -d template

git pull 可以认为是git fetch 和git merge 两个步骤的合并。

具体用法:

# 将远程主机的某个分支,与本地的指定分支合并
git pull <远程主机名> <远程分支名>:<本地分支名>

git pull 合并后可能会出现冲突,需要手动解决冲突。

error:Your local changes to the following files would files would be overwritten by merge:Please commit your changes or stash them before you merge.

解决冲突的方式是先把本地的代码暂存。

# 先将本地修改暂存起来
git stash
# 查看保存信息
git stash list
# 拉取内容
git pull
# 还原暂存内容
git stash pop

git内部存储

本地项目里面的.git 目录的文件如下:

total 184
-rw-r--r--    1 ouduidui  staff     7B 12  8 10:28 COMMIT_EDITMSG
-rw-r--r--    1 ouduidui  staff   350B 12  3 13:17 FETCH_HEAD
-rw-r--r--    1 ouduidui  staff    30B 12  3 13:17 HEAD
-rw-r--r--    1 ouduidui  staff    41B 12  8 10:29 ORIG_HEAD
-rw-r--r--    1 ouduidui  staff   620B 12  3 13:17 config
-rw-r--r--    1 ouduidui  staff    73B 10  4 11:16 description
drwxr-xr-x   12 ouduidui  staff   384B 10  4 11:16 hooks
-rw-r--r--    1 ouduidui  staff    63K 12  8 10:29 index
drwxr-xr-x    3 ouduidui  staff    96B 10  4 11:16 info
drwxr-xr-x    4 ouduidui  staff   128B 10  4 11:17 logs
drwxr-xr-x  259 ouduidui  staff   8.1K 12  3 10:07 objects
-rw-r--r--    1 ouduidui  staff   1.1K 12  3 13:16 packed-refs
drwxr-xr-x    5 ouduidui  staff   160B 10  4 11:17 refs
文件/路径名 介绍
COMMIT_EDITMSG commit编辑
FETCH_HEAD 是一个版本链接,记录在本地的一个文件中,指向着目前已经从远程仓库取下来的分支的末端版本
HEAD 代码库当前分支的指向
ORIG_HEAD 针对某些危险操作,git通过记录HEAD指针的上次所在的位置ORIG_HEAD提供了回退的功能。当你发现某些操作失误了,比如错位的reset 到一个很早很早的版本,可以使用git reset --hard ORIG_HEAD 回退到上一次reset 之前
config 代码库基本的配置文件
description 项目描述
hooks 存储git钩子的目录,钩子只在特定时间发生时触发的脚本,比如提交之前和提交之后
index 暂存区
info 存储git信息的目录
logs 存储git操作日志
objects 存储git各种对象及备用的对象库
packed-refs git 会定期执行一个叫git gc 的命令,gc 是 garbage collection 的缩写。这个命令会将一些暂时用不到的 commit 和分支的具体内容打包起来,打包在 objects 文件夹下的 pack 文件夹下,用来压缩所占用的体积。这个文件就是用来记录这些信息的
refs 存储git各种引用的目录,包含分支、远程分支和标签

git状态

我们可以通过git status 查看本地存储状态。

git status

# Changes to be committed:代表被add的文件,被加载到了暂存区
# Changes not staged for commit:代表在当前分支中被修改的文件,还没有被add,存储在工作区

git常用命令

配置git

# 配置用户名
git config --global user.name "username"

# 配置邮箱
git config --global user.email "userEmail"

初始化

git init

添加文件并提交代码

# 添加文件
git add <filename>

# 添加全部文件
git add .

# 强制提交文件,可提交.gitinore中配置的文件
git add -f <filename>

# 提交代码
git commit -m "commit message"

查看当前仓库状态

git status

对比文件改动内容

git diff <filename>

查看git日志

git log

版本回退

# 版本回退到第N个版本前
git reset --hard HEAD~N

# 版本回退(切换)到指定版本
git reset --hard <commit id>

查看关联仓库链接信息

git remote -v

关联远程仓库

git remote add origin <url>

推送到远程库

git push

# 第一次推送
git push -u origin <branch name>

# 推送到其他分支
git push origin <branch name>

克隆代码

git clone <url>

# 克隆指定分支代码
git clone -b <branch name> <url>

创建分支

git branch <branch name>

切换分支

git checkout <branch name>

# 创建并切换分支
git checkout -b <branch name>

查看分支

git branch

# 查看远程分支
git branch -r

# 查看所有分支
git branch -a

合并分支

合并某分支到当前分支,若存在冲突会提示手动修改后在提交,git merge 默认为fast forward模式

# fast forward模式
git merge <other branch name>

# 禁用fast forward模式
git merge --no-ff -m "commit message" <other branch name>

查看分支合并图

git log --graph --oneline --abbrev-commit

删除分支

git branch -d <branch name>

# 强制删除
git branch -D <branch name>

保存工作空间

git stash

查看保存的工作空间

git stash list

从保存的工作空间恢复

git stash apply

# 若存在多个保存的工作空间 (n为序号,从0开始)
git stash apply stash@{n}

# 从保存的工作空间恢复并删除保存空间
git stash pop

# 若存在多个保存的工作空间 (n为序号,从0开始)
git stash pop stash@{n}

删除保存的工作空间

git stash drop

# 若存在多个保存的工作空间 (n为序号,从0开始)
git stash drop stash@{n}

将其他分支的提交应用到当前分支

git cherry-pick <commit id>

抓取代码

git pull

将本地分支与远程分支关联

git branch --set-upstream-to <local branch name> origin/<remote branch name>

建立标签

# 给当前分支建立标签
git tag <tag name>

# 给某个提交建立标签
git tag <tag name> <commit id>

# 给某个提交建立标签并添加注释
git tag <tag name> -m "description" <commit id>

查看标签

git tag

查看标签信息

git show <tag name>

删除本地标签

git tag -d <tag name>

删除远程标签

git push origin :<tag name>

推送标签至远程仓库

# 推送所有本地标签 
git push --tag

# 推送指定标签
git push origin <tag name>
阅读 678更新于 2020-12-25

原文地址:https://www.cnblogs.com/webSnow/p/16646748.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Git安装和使用 Git安装和使用 刚开始用git的小白适用,,转自http://www.cnblogs.com/qijunjun/p/7137207.html 实际项目开发中,我们经常会用一些版本控制器来托管自己的代码,今天就来总结下Git的相关用法,废话不多说,直接开写。 目的:通过Git管理g
fatal: remote origin already exists.解决方法 第一个问题git remote add origin**************fatal: remote origin already exists.(报错远程起源已经存在。)上网查了下,有很多小白遇到过这个问题,以
git常用命令(二)查看历史记录 git log [--pretty=oneline] [ --oneline] / reflog Eniac-W 于 2020-10-18 18:12:38 发布 2368 收藏 3分类专栏: git 文章标签: git版权 git专栏收录该内容10 篇文章0 订阅
git之如何把本地文件上传到远程仓库的指定位置 git专栏收录该内容2 篇文章0 订阅订阅专栏2018.11.26添加内容: 对于自己的仓库,我们建议将远程仓库通过clone命令把整个仓库克隆到本地的某一路径下。这样的话我们从本地向远程仓库提交代码时,就可以直接把需要提交的文件拖到我们之前克隆下来的
代码规范之 lint-staged 在代码提交之前,进行代码规则检查能够确保进入git库的代码都是符合代码规则的。但是整个项目上运行lint速度会很慢,lint-staged能够让lint只检测暂存区的文件,所以速度很快。 安装与配置 安装husky和lint-staged: yarn add hu
方法:1、文件没有git操作时用“git checkout--文件”命令还原;2、文件提交到暂存区时用“git reset HEAD”命令回退当前版本还原;3、文件提交到仓库区时用“git reset HEAD^”命令回退上一个版本还原。 本文操作环境:Windows10系统、Git2.30.0版、
使用Git将本地文件提交到远程仓库 一 操作准备条件: git远程仓库已经建好了,本地文件已经存在了,现在要将本地代码推到git远程仓库保存。 解决办法如下: 1、(先进入项目文件夹)通过命令 git init 把这个目录变成git可以管理的仓库 git init 2、把文件添加到版本库中,使用命令
GitHub克隆代码到本地全教程 因为工作原因更换电脑,想要从GitHub上拉取代码的话需要重新配置ssh keys,时间过的久了怕忘记就把步骤给记录下来。 具体步骤: 1.安装git 这我就不说了 2.在TortoiseGit的安装文件中找到 puttygen.exe应用程序 ,默认应该都是 :C
github上传项目的时候报出git@github.com: Permission denied (publickey). fatal: Could not read from remote repo 前言 会不会有程序员小伙伴在刚开始使用github的时候上传项目的时候困难重重,但是又基于自己本身
查看历史 git log --pretty=onelinegit log (然后一直按enter键) 一个是切换根据历史里面的id切换git checkout ID git log 需要不断按enter键出来历史提交记录 git log --pretty=oneline 是直接出来历史记录
Git工作原理及常用命令 欧怼怼发布于&#160;2020-12-08 git介绍 git(读音/ɡɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。 git
git git提交项目的具体流程 git项目流程:以下主要有3个角色:负责人、成员A、成员B(若负责人也要修改代码,则负责人同时兼任2个角色:负责人、成员) 主要负责人:搭建项目架构且提交到git上1.github官网登录后,新建仓库,生成地址url,复制线上仓库.git结尾的地址url2.在一个空
git上传项目全部流程 一、下载git 进入网址:https://git-scm.com/downloads; 点击中的Download 2.16.0 for Windows; 在中选择蓝色字段点击,根据电脑64或32位选择适合的下载,点击即可进行下载,下载完成后傻瓜式安装,一直点击下一步即可完成安
Your local changes to the following files would be overwritten by checkout问题的解决 于 2018-07-17 11:38:27 发布 Git 的本地版本管理有三个部分 名称&#x9;说明工作区(Working Directory)&#x9;
Git配置SSH Keys步骤使用教程 1.若是首次安装使用git,先配置用户名称和邮箱(如果有就不需要配置) 打开Git Bash,输入 git config --global user.name &quot;姓名&quot;git config --global user.email &quot
基本配置完成,接下来就是上传你要上传的项目了。 1、初始化git 进入你要上传的项目的文件夹,在文件夹内鼠标右击,选择“Git Bash Here”打开git命令行,输入: $ git init 目的是初始化git,并且会创建个“.git”文件夹,里面有个“config”就是用来保存远程厂库路径地址
本篇内容主要讲解“gitee如何上传代码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“gitee如何上传代码”吧! ...
这篇“从gitee上下的代码如何用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这...
这篇文章主要介绍“gitee如何下载仓库里的项目”,在日常操作中,相信很多人在gitee如何下载仓库里的项目问题上存在疑惑,小编查阅了各式资料,整理出简单好用的...
本篇内容主要讲解“怎么在Gitee上更新代码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么在Gitee上更新代...