【个人笔记】Git

Tiltle: Github 使用


📖 快速使用


音标:[ɡɪthʌb]

0 介绍

  • Github是一个面向开源与私有软件项目的 托管平台,Git源自其内部的版本库格式.
  • 2008年上线,18年被微软收购;
  • 有很多知名的开源项目:jQuery、python等
  • Github有企业版,要付钱. 免费用户只能使用公共仓库,代码要公开;付费用户可建立私人仓库.

1 Git 入门

1.1 准备工作

  1. 注册github账户
  2. 下载安装git
  3. ... 懒得写了

1.2 是否用ssh

  • 前言

    分成用 https url进行 git clone,和用 ssh url 进行clone;

    区别

    1. 用https url 进行clone时方便,谁的项目都能随便 colne;用ssh url 进行clone麻烦,必须是项目的拥有者,需配置配置和添加 ssh key;
    2. 用https url的,push时需要用户名和密码(得project开了权限),这样不方便也不安全;ssh在push时方便又安全,不需要用户名,若ssh设置了密码就需要密码,不然密码都不需要;

    github生成ssh密钥教程 CSDN

1.3 project的建立到简单flow

  • git init

    把当前路径,新建仓库并初始化

    在当前目录中生成本地的git管理与文件夹 (.git/

  • 配置个人信息

    1. git config --global user.mail "我邮箱@?.com"

    2. git config --global user.name "我的usr name"

    全局设置个人commit的usr name、邮箱

    取消 的方式:git config --global --unset user.mail 以及 --unset user.name

    设置全局,就是所有项目commit时都用这个;在公司电脑上不知道会不会影响别人,我把global撤了;

    不想设置全局的话,就删掉--global

    • 查看是否设置成功:输 git config --list

      会打印本地project的 .git/config 中的内容,会显示user和email设置信息

  • git add 文件

    没报错,就成功地把文件加入到了仓库的暂存区

    git add . 加入所有文件

    • 注意:git add .git add -A的区别

      git add .是当前path下,文件变化都加入到暂存区,不包括"删除";

      git add -A 或者 git add --all是所有path下,==整个项目的文件变化(包括删除)==都加入到暂存区。

  • git commit -m '注释' (是短注释)

  • git commit -a (弹窗长注释)

    上传当前版本

  • git push -u origin master

    提交到网络上

1.4 常用指令

  • git clone 路径 ------ clone项目

    git clone 目标path 我path

    自定义clone后文件名

  • git branch [option] ------ 列出(查看)所有本地分支,当前分支上标了*

    常用option:

    1. -r 查看远程分支
    2. -a 查看所有分支

    git branch A ------ 建新分支A

  • git checkout A ------ 切换为分支A

  • git pull ------ 更新remote 的branch信息

  • git log ------ 查看提交日志

    git log --oneline ------ 精简模式

2 常见情景/需求

2.1 branch操作

查看分支是否是最新的
  • git diff HEAD origin/分支名

    不是最新,就会有内容打出来。

  • 或者重新 git pull,如果最新的话,会说的。

删除本地分支
  • 直接暴力删除此branch

    git branch -D 分支名,就是-delete -force的意思。

  • merge后改分支的名称

    • 在当前分支上修改此分支名称

      git branch -m 新名字

    • 修改任意分支的名字

      git branch -m 分支名 新名字

  • merge后删除

    git branch -d 分支名即可

2.2 commit操作

  • commit_ID不需要写全,写前几位就好了!
git log只显示一条
  • git log --prettt=oneline
回滚到之前的commit
  1. git reset --hard commit_ID

    hard是强制回滚。要慎用!

⭐️ 撤回上一次的commit
  • git reset --soft HEAD^

    1. --soft 不删除工作区代码的改动,不撤销add,仅仅是撤销commit;

      其他代替:--mixed默认参数:不删除工作区代码的改动、撤销add、也撤销commit;

      --hard:既删除工作区代码的改动、也撤销add、也撤销commit;

    2. HEAD^ 意思是上个代码版本,等价于 HEAD~1

      其他代替:若想把上次commit、上上次commit也撤掉,就写HEAD~2.

  • 一不小心执行多了,撤销了以前的commit,咋办!!💢

    1. git reflog

    2. 复制选择黄色的ID数字

    3. git reset --soft [id]

      就可以回到之前commit的状态了!偶也!

删除上一次commit------(这个好复杂,底层原理没看懂)
  1. git commit rebase -i commit_ID 打开这次commit之后的(不包含此次)commit记录。

  2. 把后面几条commit记录,从pick改成drop;(但我实验后报错说,"没有drop命令")...

  3. 重新git log,可以看到commit记录没了已经。但目前还是rebase状态,还没退出去呢。

    如果出现第二点的报错(说没有"drop"命令)的话,commit记录依然会没有的,直接在此时commit就好了。

  4. git rebase --continue退出rebase即可。

修改上一次commit的注释
  • flow

    git commit --amend,弹窗后修改注释即可

    注:此句依然具有commit的效果

合并多次commit的记录
  • flow

    把我搞死,好不容易才试出来.

    1. 先把当前状态commit掉先:

      git add -A 把所有变化都放入暂存区(git add .对大项目没用的);

      git commit提交掉。

    2. git log ,查看提交日志;

    3. git rebase -i commit_ID ,ID选择最前面"不要被合掉的log";

    4. 会弹窗,多个log的记录。第一条必须是pick开头,后面几条的pick全改成s,即squash.

      注:必须第一条是pick。

      保存退出。

    5. 此时进入rebase状态,用git log查看,只剩第一个commit log了,就在这个状态下重新git add -A 然后 git commit --amend

    6. git rebase --continue,退出rebase,弹出日志,直接保存退出即可。

    7. 中途如果不想折腾了,用git rebase --abort即可中断。

  • 理解 git rebase

    git rebase是把当前的代码放在暂存区(stash),在保证当前工作区是干净的情况下(也就是得在刚commit后),把以前branch的code拉到本地(工作区)。然后把工作区和暂存区的代码合并。

  • 暂存区有什么异常或者报错

    就用git status,查看一下。

2.3 文件追踪

查看那些文件被git追踪
  • git ls-tree -r master --name-only,不想显示子目录,就去掉-r哈。
屏蔽/忽略/unstaging部分文件

设置了,这些文件就不会被git add算入了。

  • 工程目录中新建一个.gitignore文件,里面写上要unstaging的文件名

    demo:

    makefile 复制代码
    # 忽略(unstage)所有 .log 后缀文件
    *.log
    
    # 忽略所有子文件夹中,名称为temp的文件夹
    temp/
    # 忽略的文件夹中,额外有某个文件要stage
    !temp/important.md
    
    # 仅忽略某个指定路径的文件夹内的数据
    /text.txt

    更多语法,见:Git .gitignore ------w3school

📖 git 细说


1 工作区与分支

工作区、暂存区、版本库

  • 工作区(working directory/workspace/project folder)

    电脑肉眼可见的文件目录

    是下图的 绿色。存项目文件的。

  • 暂存区(staging area/index)

    位置在.git/index中,故又称"索引";

    是下图的 蓝色肚子里的白色 ,存**git add**的staging文件信息。

  • 本地版本库(local repository/repo)

    为工程path下的隐藏文件.git/object

    是下图的 蓝色。存版本、节点信息的,装的是各种**git commit**内容。

  • 远处版本库(remote repo):服务器上的repository.

  • 关系如下图:

  • Head就是指向"当前active的分支"的游标,可以根据我们的切换(checkout)跳来跳去;

  • 各种git操作对三个区的影响

    • git add:会基于文件修改,更新到index(staging area);

    • git commit:把staging area的东西存入objects中来;

    • git checkout .:用staging area的内容,替换工作区的文件。

      故若工作区文件未保存,将被清除。

    • git checkout HEAD .:会替换staging area以及工作区的文件。

      两边的文件若未保存,将被清除。

分支

没写

2 rebase指令 (commit修改)

  • 不错的ref:【git 整理提交】git rebase -i 命令详解 CSDN

  • rebase时,对commit_ID的操作有:

    • pick,正常提交(commit)

      改变顺序的话,commit的顺序也会改;删掉的话,commit的记录也会删掉;

    • squash

      多个commit合并,向old的记录合并;

    • 其他

      懒得写。

3 reset (版本回退)

简要用法

  • 理解git的存档与时间穿梭关系

    1. 在git中,commit就是一个存档点;

    2. 当前所处的commit版本是HEAD,上一个版本是HEAD^,上上个版本是HEAD^^,往上100个版本是HEAD~100

    3. 版本回滚一次是:

      git reset --hard HEAD^

      后悔了,取消回滚 咋办------terminal还没有关掉时,输入:

      git reset --hard 原来的commit_ID.

      不小心关机了,开机后很后悔想取消回滚 咋办------可以用git reflog查看自己的所有git操作,里面会显示自己在之前节点操作的commit_ID,然后再用reset指令恢复(同上)。

细节语法

  • 不同option

    • --mixed模式

      也就是默认的git reset模式。

      回退

其他(未整理)

  • RHEL系统安装 git:

    【忙了一天,发现可以联网,我没设置好,晕倒】

    因为redhat企业系统 不能联网,安装git得自己下source code编译安装;但我RHEL系统库确实,不能联网下载安装很痛苦和麻烦。

    1. git官网 上去下载RHEL版本的git的source code

    2. 拷贝到RHEL系统中

    3. 解压:tar -vxf git-file.tar.gz

    4. 进入此文件夹;

    5. 编译①:./configure --prefix=/usr/local/git

    6. 编译②:make

    7. 安装:su
      make install

    8. 添加环境变量:

      ~/.bashrc 中追加一行:export PATH=$PATH:/usr/local/git/bin

    9. 查看是否安装完成:git --verision

    然后我出现了问题------"编译①"时,说zlib.h not found ,因为我的RHEL不能联网,只能继续离线安装zlib-devel 了:

    1. zlib官网 下载source code;

    2. 拷贝到RHEL系统中

    3. 解压:tar -xvzf zlib-file.tar.gz

    4. 进入此文件夹;

    5. 编译①:./configure

    6. 编译②:make -j4

    7. 安装:su
      make install

      搞定!注意,我看了一些网站用的编译①和编译②都不一样,比如用的是make,但我失败了,安装完还是扫描不到zlib.h,即使我在路径里看得见。改成现在的写法就ok了。真不容易。

  • git工程打包,包含log日志

    git archive --output "./output.tar.gz" master

    默认是 tar.gz 格式,对master分支进行打包。

    ❓ 我好像失败了?

    但是直接文件用tar打包,git文件直接就在里面了,方便多了。

origin

  • 前言

    git里关于origin分支等部分的内容,一直没搞明白。

  • Ref

    git中origin master详解

  • 概括

    origin是远程仓库(remote repository) 的默认仓库名,用来指代远程github上的仓库版本,不然总不能每次都用url来指代远程仓库吧~

    git remote -v查看所有远程分支名称,可以看到git clonegit pull下来的分支,默认名称是origin.

    当然,可以自己改。

    这样在push的时候,就知道是push给谁了。即,git push 仓库别名 推上去新建的分支名称

    • git remote add 新名字 git仓库链接 来"添加远程仓库",同时能取别名。

      新建仓库时,起名字;

    • git remote rename 老名字 新名字 来给已有的远程仓库"换名字"。

相关推荐
晓数2 小时前
【硬核干货】JetBrains AI Assistant 干货笔记
人工智能·笔记·jetbrains·ai assistant
我的golang之路果然有问题2 小时前
速成GO访问sql,个人笔记
经验分享·笔记·后端·sql·golang·go·database
lwewan2 小时前
26考研——存储系统(3)
c语言·笔记·考研
jstart千语2 小时前
【Git】连接github时的疑难杂症(DNS解析失败)
git·github
搞机小能手2 小时前
六个能够白嫖学习资料的网站
笔记·学习·分类
工具罗某人3 小时前
TortoiseGit使用图解
git
Zhuai-行淮3 小时前
vscode和git 踩坑
ide·git·vscode
nongcunqq3 小时前
爬虫练习 js 逆向
笔记·爬虫
汐汐咯3 小时前
终端运行java出现???
笔记
这颗橘子不太甜QAQ4 小时前
Husky使用技巧
javascript·git·代码规范