安装与配置

  1. 下载对应操作系统的 git

  2. 配置用户名

    1
    git config --global user.name "Scarf"
  3. 配置邮箱

    1
    git config --global user.email "1311522701@qq.com"
  4. 保存用户名和密码,不必每次都输入

    1
    git config --global credential.helper store
  5. 查看 git 的配置信息

    1
    git config --global --list
  6. 生成 ssh 密钥

    1
    2
    3
    cd # 回到用户根目录
    cd .ssh
    ssh-keygen -t rsa -b 4096 # 生成密钥,回车三次,会生成 id_rsa、id_rsa.pub 两个文件
  7. 复制 id_rsa.pub 文件内容,配置进 GiteeGithub

--global 表示对所有仓库生效。

新建仓库

将一个目录变成 Git 可以管理的仓库。

  1. 方式一:在本地新建。新建一个文件夹,之后进入文件夹执行初始化命令 git init 或者执行 git init catalogName 新建

    image-20240315093828400

  2. 方式二:克隆一个已经存在的仓库

    1
    git clone https://gitee.com/wjsr/demo.git

Git 仓库中存在隐藏 .git 文件夹,如果被删除掉,就会变成一个普通目录。

工作区域

  1. 工作区:当前正在工作的项目文件夹,包含了项目的所有文件和子文件夹。
  2. 暂存区:用于临时存储准备提交到版本控制的更改。存在于 .git 文件夹下的 index 文件中。
  3. 本地仓库:存储在本地计算机上的 Git 仓库。它包含了项目的完整历史记录和所有的文件。存在于 .git 文件夹下的 objects 文件夹中。

文件状态

  1. 未跟踪:新创建的,还未被 Git 管理起来的文件。
  2. 未修改:文件已被管理,但是还未被修改。
  3. 已修改:文件已被修改,但是还未添加进暂存区。
  4. 已暂存:未跟踪及已修改的文件被提交进暂存区后的状态。

添加和提交文件

  1. 新添加的文件为未跟踪状态

    image-20240315195913174

  2. 将未跟踪文件 file1.txt 提交进暂存区

    image-20240315200029864

  3. 创建第二个未跟踪文件

    image-20240315200118414

  4. 将暂存区的文件提交进本地仓库

    image-20240315200219909

    执行 commit 后只有暂存区中的文件会被提交进仓库,因此 file2.txt 不会被保存下来。

  5. 使用通配符批量提交 txt 为后缀的文件到暂存区

    image-20240315202342368

  6. 添加所有文件到暂存区

    1
    git add .

另外,Mac 用户可在 ignore 文件中添加以下两行忽略 .DS_Store 文件:

1
2
.DS_Store
*/.DS_Store

版本回退

  1. git reset --soft

    保留工作区以及暂存区中的文件。

  2. git reset --hard

    丢弃工作区和暂存区中的文件。

  3. git reset --mixed

    保留工作区中的文件,丢弃暂存区中的文件。

如下实例:

1
2
3
4
5
6
7
8
9
echo "1" > file1.txt
git add .
git commit -m "新建文件file1"
echo "2" > file2.txt
git add .
git commit -m "新建文件file2"
echo "3" > file3.txt
git add .
git commit -m "新建文件file3"

执行命令 git log --oneline 查看历史 commit 情况:

image-20240315215836660

git reset --soft fe84232 命令执行后将回退到"新建文件file1"版本,此时会保留工作区中的 file2file3 文件以及暂存区的 file2file3;若使用 hard 则都不会保留;使用 mixed 只会保留工作区中的 file2file3。当然不管使用哪种方式, file1 都会存在于工作区和暂存区中。

可使用 git ls-files 查看暂存区中的文件,注意执行 commit 后暂存区中的文件是不会被清空的。

Git 中不止版本可以回退,命令也行。先使用 git reflog 查看历史命令,再使用上方相应 reset 命令进行回退。

差异查看

git diff 作用:

  1. 查看工作区、暂存区和本地仓库之间的差异;
  2. 查看不同版本之间的差异;
  3. 查看不同分支之间的差异。

使用:

  1. 比较工作区和暂存区之间的差异

    1
    git diff
  2. 比较工作区和本地仓库的差异

    1
    git diff HEAD
  3. 比较暂存区和本地仓库的差异

    1
    git diff --cached
  4. 比较两个版本之间的差异

    1
    2
    3
    git diff 419557c HEAD # HEAD 指向的是最新版本,可代替提交 ID 来表示
    git diff HEAD~ HEAD # HEAD~ 表示上一个版本
    git diff HEAD~2 HEAD file1.txt # HEAD~2 表示上上个版本,跟上文件名可以比较指定文件的差异
  5. 比较两个分支的差异

    1
    git diff branch_name1 branch_name2

删除文件

  1. 把文件从工作区和暂存区中删除

    1
    git rm filename
  2. 仅删除暂存区中的文件

    1
    git rm --cached filename
  3. 递归删除工作区和暂存区中当前目录及其所有子目录和文件

    1
    git rm -r *

最后不要忘记提交。

忽略文件

.gitignore 隐藏文件,按行从上到下进行匹配。

  1. 忽略某个文件,直接新增一行输入文件名;
  2. 使用通配符,* 匹配任意字符、? 匹配单个字符,如 *.log 忽略所有日志文件;
  3. 忽略文件夹,如 temp/ 忽略任何目录下的 temp 文件夹,必须斜杠结尾;
  4. # 号开头的行表示注释。

其他匹配规则略。

文件此前若已在本地仓库中需先将文件从仓库中删除才会被忽略,否则文件一样会被跟踪着。

1
2
git rm --cached filename
git commit -m "delete"

推送拉取

  1. 将本地仓库内容推送到远程仓库

    1
    git push <远程仓库名> <本地分支名>:<远程分支名> # 远程仓库名默认是 origin
  2. 将远程仓库内容拉取下来

    1
    git pull <远程仓库名> <远程分支名>:<本地分支名>

分支

  1. 创建分支

    1
    git branch branchName
  2. 查看所有分支

    1
    git branch
  3. 切换分支

    1
    git switch branchName
  4. 合并分支

    1
    git merge dev # 在 main 分支中执行,会将 dev 分支合并到 main 中
  5. 删除分支

    1
    git branch -d branchName # 小写 d 用于删除已被合并的分支,大写则强制删除
  6. 合并冲突

    分支合并冲突时,手动修改冲突文件即可。

    image-20240316160625052

  7. 撤销合并

    1
    git merge --abort