编辑
2024-01-16
TechNotes
00

目录

下载和安装
windows
Linux
Ubuntu 或 Debian系列
CentOS 或 Fedora
Arch Linux
从源码编译安装
初始化配置
新建仓库
工作区域和文件状态
工作区域
文件状态
添加和提交文件
git reset回退版本
git diff查看差异
git rm 删除文件
.gitignore忽略文件
GitHub
关联本地仓库和远程仓库

Git是一个分布式版本控制系统,用于跟踪文件的变化并协调多人在同一项目上的工作。它具有强大的分支支持、快速的操作速度和广泛的应用,是现代软件开发中必不可少的工具之一。

image.png

下载和安装

windows

Linux

Ubuntu 或 Debian系列

bash
sudo apt update sudo apt install git

CentOS 或 Fedora

bash
sudo yum install git

或者dnf安装

bash
sudo dnf install git

Arch Linux

bash
sudo pacman -S git

从源码编译安装

如果你希望使用最新版本的Git,或者无法通过包管理器安装,你也可以从源代码编译安装Git:

首先,你需要安装一些编译工具和依赖项。在大多数发行版上,你可以通过包管理器安装这些依赖项。例如,在Ubuntu上:

bash
sudo apt install build-essential libssl-dev libcurl4-gnutls-dev libexpat1-dev gettext unzip

然后,从Git的官方仓库中下载源代码:

bash
wget https://github.com/git/git/archive/refs/tags/v2.33.0.tar.gz

注意:请替换URL中的版本号为你想要安装的Git版本。

解压源代码:

bash
tar -zxvf v2.33.0.tar.gz

进入解压后的目录并编译安装:

bash
cd git-2.33.0 make prefix=/usr/local all sudo make prefix=/usr/local install

这将把Git安装到 /usr/local 目录下。

验证安装

安装完成后,你可以通过以下命令验证是否成功安装了Git:

bash
git --version

如果成功安装,你将会看到Git的版本信息。

初始化配置

  • 查看git版本
bash
30372@GYC MINGW64 /e/tmp/gittest $ git -v git version 2.45.2.windows.1
  • 配置用户名
bash
git config --global user.name "Your Name"

有空格必须加""
--global 代表全局配置(不加则为本仓库的配置)

  • 配置邮箱
bash
git config --global user.email "mail@example.com"
  • 存储配置
bash
git config --global credential.helper store
  • 显示全部配置
bash
git config --global --list user.email=gyc0109@gmail.com user.name=gyc filter.lfs.clean=git-lfs clean -- %f filter.lfs.smudge=git-lfs smudge -- %f filter.lfs.process=git-lfs filter-process filter.lfs.required=true difftool.sourcetree.cmd='' mergetool.sourcetree.cmd='' mergetool.sourcetree.trustexitcode=true merge.tool=ultracompare mergetool.ultracompare.keepbackup=false mergetool.ultracompare.trustexitcode=false mergetool.ultracompare.prompt=false mergetool.ultracompare.cmd="C:\Program Files\IDM Computer Solutions\UltraCompare\uc.exe" -gitm $LOCAL $REMOTE $BASE $MERGED -title1 LOCAL -title2 REMOTE uc.defdiffmerge=yes uc.defdiff=yes diff.tool=ultracompare difftool.ultracompare.keepbackup=false difftool.ultracompare.trustexitcode=false difftool.ultracompare.prompt=false difftool.ultracompare.cmd="C:\Program Files\IDM Computer Solutions\UltraCompare\uc.exe" -gitdt $LOCAL $REMOTE $BASE $MERGED -title1 LOCAL -title2 REMOTE credential.helper=store credential.https://gitee.com.provider=generic core.autocrlf=true
  • 显示配置好的用户名和邮箱
bash
30372@GYC MINGW64 /e/tmp/gittest $ git config --global user.email gyc0109@gmail.com 30372@GYC MINGW64 /e/tmp/gittest $ git config --global user.name gyc

新建仓库

bash
git init <project-name>
  • 创建一个新的本地仓库 (省略project-name则在当前目录创建。)
bash
30372@GYC MINGW64 /e/tmp/gittest $ git init Initialized empty Git repository in E:/tmp/gittest/.git/ 30372@GYC MINGW64 /e/tmp/gittest (master) $ ls -a ./ ../ .git/
  • 克隆远程仓库也可以创建仓库
bash
git clone <url>
  • 克隆一个远程仓库

工作区域和文件状态

工作区域

概念描述
工作区(Working Directory)你在电脑上看到的目录,包含了你的项目的所有文件和子目录。
暂存区(Stage/Index)一个临时存储区,用于存放你的改动,这些改动将在你执行git commit命令时被提交到本地仓库。
本地仓库(Repository)Git的核心部分,包含了你的项目的所有版本和历史记录。本地仓库的信息存储在.git这个隐藏目录中。
远程仓库(Remote Repository)托管在远程服务器上的仓库,例如GitHub、GitLab、Gitee等。你可以将你的本地仓库同步到远程仓库,也可以从远程仓库获取更新。

image.png

文件状态

状态描述
已修改(Modified)文件已经被修改,但还没有被添加到暂存区。
已暂存(Staged)文件已经被添加到暂存区,准备提交到本地仓库。
未跟踪(Untracked)文件还没有被Git跟踪,也没有被添加到暂存区。
已提交(Committed)文件已经被提交到本地仓库,此时文件的修改已经被永久保存下来。

image.png

添加和提交文件

  • 创建仓库
bash
git init <project-name>
  • 查看仓库状态
bash
git status
  • 创建文件
bash
30372@GYC MINGW64 /e/tmp/gittest (main) $ echo "这是第一个文件" > file1.txt 30372@GYC MINGW64 /e/tmp/gittest (main) $ cat file1.txt 这是第一个文件
  • 再次查看仓库状态
bash
30372@GYC MINGW64 /e/tmp/gittest (main) $ git status On branch main No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) file1.txt
  • 将文件添加到暂存区
bash
30372@GYC MINGW64 /e/tmp/gittest (main) $ git add file1.txt warning: in the working copy of 'file1.txt', LF will be replaced by CRLF the next time Git touches it 30372@GYC MINGW64 /e/tmp/gittest (main) $ git status On branch main No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: file1.txt ``` - 将文件提交到本地仓库 ```bash git commit -m "message"
bash
30372@GYC MINGW64 /e/tmp/gittest (main) $ git commit -m "first commit" [main (root-commit) 2e439a0] first commit 1 file changed, 1 insertion(+) create mode 100644 file1.txt 30372@GYC MINGW64 /e/tmp/gittest (main) $ git status On branch main nothing to commit, working tree clean

-m 参数为添加上传注释(不加的话会进入vim交互式界面)

  • 查看提交历史
bash
git log
bash
git log --oneline

--oneline表示简介模式

git reset回退版本

image.png

重置当前分支的HEAD为之前的某个提交, 并且删除所有之后的提交。
--hard参数表示重置工作区和暂存区,
--soft参数表示重置暂存区,
--mixed参数表示重置工作区 (默认)。

  • 使用git reflog查看git操作历史记录
bash
git reflog

git diff查看差异

image.png

  • 不加参数默认查看工作区暂存区的差异
命令描述
git diff比较工作区与暂存区的差异
git diff --staged比较暂存区与最新提交(HEAD)的差异
git diff <commit1> <commit2>比较两个提交之间的差异
git diff <file>比较指定文件的差异
git diff <branch1> <branch2>比较不同分支之间的差异
git diff --stat显示简略的差异信息
git diff <commit> <file>比较指定提交中的某个文件的差异

git rm 删除文件

bash
git rm <file>

从工作区和暂存区删除一个文件, 并且将这次删除放入暂存区。

bash
git rm --cached <file>

从索引/暂存区中删除文件, 但是本地工作区文件还在, 只是不希望这个文件被版本控 制

.gitignore忽略文件

image.png

.gitignore 文件用于告诉 Git 忽略哪些文件或目录,这些文件和目录将不会被 Git 跟踪和版本控制。

以下是一个简单的 .gitignore 文件示例:

bash
# 忽略所有以 .a 结尾的文件 *.a # 但是希望 track 某个 .a 文件,例如 lib.a !lib.a # 忽略所有的 .txt 文件 *.txt # 仅仅忽略根目录下的 TODO.txt,不包括 subdir/TODO.txt /TODO.txt # 忽略 build/ 目录下的所有文件 build/ # 忽略 doc/ 目录下的所有 .pdf 文件 doc/*.pdf 以上是 .gitignore 文件的一些规则说明:

# 符号开头的行是注释,不会被 Git 解析。
* 表示通配符,比如 *.a 表示忽略所有以 .a 结尾的文件。
! 表示例外规则,用于确保某些特定文件被跟踪。
/ 开头的路径表示相对于仓库根目录的路径。
/ 结尾的路径表示忽略整个目录,包括其下的所有文件。
不带 / 的路径表示忽略相对于当前 .gitignore 文件所在目录的路径。

image.png

GitHub

  • 添加ssh密钥
bash
git config --global user.name "your_name" git config --global user.email "you@example.com" ssh-keygen -t rsa -C "your_email@youremail.com" # 第一次创建一路回车 cat ~/.ssh/id_rsa.pub # 并复制粘贴到github上 ssh -T git@github.com # 测试

image.png

关联本地仓库和远程仓库

  1. 添加远程仓库地址:
bash
git remote add origin <仓库名称>

2.更改本地默认分支名为 main:

bash
git branch -M main
  1. 推送本地代码到远程仓库:
bash
git push -u origin main
  • 查看远程仓库
bash
git remotr -v
  • 拉取远程仓库内容
bash
git pull <远程仓库名> <远程分支名>:<本地分支名>
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:GYC

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!