跳转至

💻 Git

参考



License

MIT

Massachusetts Institute of Technology License

我只想安安静静写代码,你干嘛都与我无关

  1. 版权申明

    • 文档和软件中需保留原始版权信息
  2. 免责条款

    • 原始作者对软件使用引发的任何损害不负责
  3. 使用

    • 随便用
  4. 修改

    • 随便改
  5. 再分发

    • 随意


BSD

Berkeley Software Distribution License

打广告的时候,别说你是基于我的,丢脸

  1. 版权申明

    • 文档和软件中需保留原始版权信息
  2. 免责条款

    • 原始作者对软件使用引发的任何损害不负责
  3. 使用

    • 随便用,但是宣传软件的时候,不要带上我
  4. 修改

    • 随便改
  5. 再分发

    • 随意


GPL

GNU General Public License

一日GPL,一生GPL

  1. 版权申明

    • 文档和软件中需保留原始版权信息
  2. 免责条款

    • 原始作者对软件使用引发的任何损害不负责
  3. 使用

    • 随便用
  4. 修改

    • 随便改,但是改了之后的代码不能闭源
  5. 再分发

    • 依旧遵循 GPL


LGPL

GNU Lesser General Public License

更灵活的GPL

  • 允许动态连接闭源库

  • 虽然灵活,但这并不意味着你可以闭源


Apache

  1. 版权申明

    • 文档和软件中需保留原始版权信息
  2. 免责条款

    • 原始作者对软件使用引发的任何损害不负责
  3. 使用

    • 随便用
  4. 修改

    • 随便改
  5. 再分发

    • 修改后的软件,分发时需要带上原始版权信息



安装

Linux

Bash
1
2
sudo apt install git # 安装 git
git --version        # 验证 git 安装成功


Windows

git 官网



首次使用

初始化仓库

在需要管理的目录(工作区)下,执行以下命令:

Bash
1
git init
  • 将目标目录初始化成 git 可以管理的仓库,会生成一个 .git 目录

  • 同时,会创建一个 master 分支,看不见,但是存在


设置名字和邮箱

此操作的目的,是为了追踪每次操作,究竟是谁做的,我们一般将其存储在 config

配置文件有三个级别,权重从高到底:

  1. 仓库 local,此配置文件只对 当前仓库 有效

  2. 全局 global,此配置文件对 当前用户 有效

  3. 系统 system,此配置文件对 全局 有效

所在位置:

Windows

  1. local.git/config

  2. globalC:\Users\username\.gitconfig

  3. systemC:\Program Files\Git\etc\gitconfig

Linux

  1. local.git/config

  2. global~/.gitconfig

  3. system/etc/gitconfig


文件追踪 / 移动到暂存区

Bash
1
git add 目标文件

追踪所有文件:

Bash
1
git add .


将暂存区提交到本地仓库

目标文件提交到本地仓库的当前分支:

Bash
1
git commit -m "提交说明"


将本地仓库推送到远程仓库

将本地仓库推送到远程仓库,需要使用 SSH key 进行身份验证

私钥存储在本地,公钥存储在远程仓库

当你推送的时候,远程仓库会验证你的身份,如果验证通过,就可以推送

  1. 生成 SSH key

    Windows

    Bash
    1
    ssh-keygen -t rsa -C "email"
    

    -t rsa:指定加密算法为 RSA

    -C "email":指定注释,一般填邮箱

    Linux

    Bash
    1
    ssh-keygen -t rsa -C "email"
    
  2. 将公钥添加到远程仓库(github or gitee

    WindowsC:\Users\username\.ssh\id_rsa.pub

    Linux~/.ssh/id_rsa.pub

    登录远程仓库,setting -> SSH keys -> New SSH key

    title:填写公钥的名字

    key:填写公钥的内容

  3. 在远程仓库中新建仓库

    名称和本地仓库可以不一样,但建议一致

    开源和私有暂且不论,但建议开源

    复制仓库地址,使用 ssh

  4. 添加远程仓库

    Bash
    1
    git remote add origin 远程仓库地址
    

    origin 是远程仓库的别名,可以自定义

  5. 推送到远程仓库

    Bash
    1
    git push origin master
    

注意,以上操作只是将本地仓库推送到远程仓库,但是远程仓库并不会自动创建分支


将远程仓库拉取到本地仓库

  1. git fetch origin

    • 拉取远程仓库的所有分支到本地仓库,但是不会自动合并

    • git merge origin/master

      • 将远程仓库的 master 合并到本地仓库的当前分支
  2. git pull origin

    • 拉取远程仓库的所有分支到本地仓库,并自动合并
  3. git clone 远程仓库地址

    • 在本地创建一个远程仓库的克隆(副本)


创建分支

Bash
1
git branch 分支名


设置默认编辑器

Bash
1
git config --local core.editor "vim"



查看状态

仓库

Bash
1
git status
  • 显示位于哪个 分支

  • 显示 暂存区 的信息

  • 显示 未跟踪 的文件


设置

Bash
1
git config --级别 -l

--级别 可以省略,会显示最终三个配置文件计算后的配置信息


所有分支

Bash
1
git branch

* 表示当前分支


远程仓库

Bash
1
git remote -v
  • 远程仓库的别名和地址


查看提交历史

Bash
1
git log

显示从最近到最远的提交日志

简化输出:git log --pretty=oneline


查看命令历史

Bash
1
git reflog

显示从最近到最远的命令日志

可以看到每一次命令的 commit id



修改

更改名字和邮箱

Bash
1
2
git config --级别 user.name "新名字"
git config --级别 user.email "新邮箱"


修改上一次提交的信息

Bash
1
git commit --amend

如果使用的是 nano 编辑器,按 Ctrl + X 退出,然后输入 Y 保存,最后按 Enter 退出


从暂存区移除文件

Bash
1
git reset 目标文件

这个命令本质上是

Bash
1
git reset --mixed commit_id

从暂存区移除文件,但是不会删除文件

commit_id 可以省略,默认是 HEAD

意思是将暂存区的文件恢复到 commit_id 的状态


撤销本次提交

  1. 保留工作区的修改

    Bash
    1
    git reset --soft HEAD^
    
    > 撤销本次提交,但是保留工作区的修改

    HEAD^ 表示上一次提交,HEAD^^ 表示上上次提交,以此类推

  2. 删除工作区的修改

    Bash
    1
    git reset --hard HEAD^
    

    撤销本次提交,同时删除工作区的修改


删除远程仓库地址

Bash
1
git remote rm origin

删除远程仓库的别名为 origin 的仓库(地址)

仅仅是删除了别名,远程仓库并没有被删除


切换分支

Bash
1
git checkout 分支名

切换到指定分支



国区操作

代理

设置代理

Bash
1
2
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy https://127.0.0.1:7890

取消代理

Bash
1
2
git config --global --unset http.proxy
git config --global --unset https.proxy

同时推送到多个远程仓库

  1. 再添加一个需要推送的远程仓库

    Bash
    1
    git remote set-url --add origin 远程仓库地址
    
  2. 推送到远程仓库

    Bash
    1
    git push origin
    

注意,此方案只适用于多个远程仓库的代码完全一致的情况

因为我们只是给 origin 添加了多个 URL

虽然效果上看起来是推送到了多个仓库,但是实际上只是推送到了一个仓库

gitee 记住账号密码

Text Only
1
git config --local credential.helper store

.gitignore

忽略某些文件和目录

忽略文件或目录

Text Only
1
2
a.txt
a/

忽略某类文件

Text Only
1
*.txt

例外规则

Text Only
1
!a.txt