git使用

目录

1. Git简介

1.1 什么是Git

是用来进行版本管理的工具

1.2 Git的作用

可以将仓库的文件拉取到本地,也可以提交到仓库

进行版本管理,进行代码审查,防止事故发生

事故发生后,及时回滚,确定责任

1.3 相关术语

  • 工作区:本地修改文件的目录。
  • 暂存区:通过 git add 暂存的文件区域。
  • 仓库:通过 git commit 提交的代码版本库。

2. 安装与配置

2.1 安装步骤

Ubuntu : apt install git

windows : 下载对应的安装包

macOS :

  • 使用 Homebrew:brew install git
  • 或下载官方安装包 Git for macOS

验证安装

1
git --version

2.2 基本配置

1
2
3
git config --global user.name "用户名"

git config --global user.email "example@email.com"

–global :对当前用户的仓库生效

–system:对系统下的所有用户生效

–local\无参数 :只对当前仓库有效

级别由高到低,低级别会覆盖高级别的配置

3. 基本命令

3.1 仓库初始化

在创建一个文件夹为项目目录后(mkdir)

cd到当前文件夹

git init 默认在当前目录初始化,或 git init <目录名> 创建新目录并初始化。

这样初始化就完成了

1
git clone <git_url>

克隆项目

后面可以接 -b

指定分支

也可以 指定目录

添加origin

1
2
git remote add origin_ssh git@github.com:your-username/example-repo.git
git remote add origin_http https://<token>@github.com/your-username/example-repo.git

查看

1
git remote -v

同一个origin可以设置不同的push和fetch

1
>git remote set-url --add --push origin "地址"

配置ssh

使用ed25519生成密钥

1
ssh-keygen -t ed25519 -C "example@email.com"

得到密钥后,将公钥(pub)存于SSH keys

3.2 添加与提交

添加

把工作区文件添加到暂存区

1
2
3
git add 文件/目录
git add .
git add main.c

提交

将暂存区的修改提交到本地仓库

1
git commit -m "这次修改了xxx"

提交到origin仓库

1
git push origin main

3.3 查看状态与历史、

查看状态

1
2
git status        # 查看工作区和暂存区状态
git status -s # 简洁模式(M=修改,A=新增,D=删除,??=未跟踪)

查看提交历史

1
2
3
4
git log                   # 完整提交历史
git log --oneline --graph # 图形化单行历史
git log -p <文件路径> # 查看文件的提交历史及差异
git show <commit_id> # 查看某次提交的详细信息

查看差异

1
2
3
git diff             # 工作区与暂存区的差异
git diff --staged # 暂存区与最新提交的差异
git diff HEAD~2 HEAD # 比较两次提交的差异

撤销与溯源

1
2
3
git restore <文件路径>          # 撤销工作区未暂存的修改
git restore --staged <文件路径> # 撤销暂存区的修改(保留工作区)
git reflog # 查看所有操作记录(可找回误删提交)

追踪代码修改

1
2
git blame <文件路径>    # 查看文件每行的修改者和提交ID
git blame -L 10,20 main.c # 查看文件第10-20行的修改历史

3.4 其他命令

查看工作区状态

1
git status

查看提交历史

1
git log

查看某一个id提交的详细信息

1
git show 10b8277(提交的id)

垃圾回收,减少体积

1
git gc

撤销更改,溯源

1
git reflog

拉取完整的仓库

1
git clone https://github.com/PCFXPCFX/note.git

拉取代码,不merge

1
git fetch https://github.com/PCFXPCFX/note.git

拉取并合并

1
git pull origin main

4. 分支管理

分支管理基本思路

  1. 集中式工作流

    依托主干 master 开发

    1.获取master

    ​ 可使用clone

    2.在master上进行修改

    3.拉取最新的代码和本地进行合并(rebase),解决冲突

    4.提交代码到master (push)

    代表平台 Gerrit 如aosp开发

  2. 分支式工作流

    定义不同的分支进行开发

    可能有

    master(主干)

    develop(开发)

    feature(特性)

    release(发布)

    hotfix (热修复)

    可能的开发流程

    1.由owner 创建创库

    => 其他用户通过Fork 创建仓库进行开发

    或=>分配权限在同一仓库进行开发

4.1 分支基本操作

创建分支

1
git branch feature-login

创建并切换分支

git checkout -b feature-login

删除本地分支(已合并)

git branch -d feature-login

强制删除未合并分支

git branch -D feature-login

删除远程分支

git push origin –delete feature-login

查看所有分支

git branch -a

4.2 合并与冲突

合并分支 → 发现冲突 → 打开冲突文件 → 手动编辑 → 删除冲突标记 → git add → git commit

1. 合并分支(触发冲突)

git checkout main
git merge feature-login

####2. 手动编辑冲突文件(如 login.py)

文件内容示例:

1
2
3
4
5
<<<<<<< HEAD
print("Main branch logic")
=======
print("Feature branch logic")
>>>>>>> feature-login

冲突标记的含义:

1
2
3
4
5
<<<<<<< HEAD:当前分支的修改。

=======:分隔符。

>>>>>>> 分支名:合并分支的修改。

3. 解决冲突后标记为已解决

1
git add login.py

4. 提交合并结果

1
git commit -m "Merge feature-login and resolve conflicts"

5. 远程仓库

5.1 克隆与推送

推送本地分支并关联远程分支(首次推送)

1
git push -u origin feature-login

拉取远程分支到本地

1
git checkout -b feature-login origin/feature-login

强制推送(谨慎使用)

会覆盖远程历史,仅在必要时使用!

1
git push --force origin main

5.2 远程分支操作

同步远程分支状态

1
git fetch origin

删除本地缓存的已失效远程分支

1
git remote prune origin

6. 常用技巧

6.1 重写历史

修改最后一次提交

1
git commit --amend -m "修正提交信息"

交互式变基(合并最近3次提交)

1
git rebase -i HEAD~3

编辑界面中将后两次提交标记为 squash

交互式变基 可以通过 squash 将多个提交合并为一个提交,使提交历史更清晰。

pick 1a2b3c4 提交1

squash 5d6e7f8 提交2

squash 9a0b1c2 提交3

6.2 标签使用

创建轻量标签

1
git tag v1.0.0

创建附注标签

1
git tag -a v1.0.0 -m "正式发布版本 1.0.0"

推送标签到远程

1
git push origin v1.0.0

推送所有标签

1
git push origin --tags

7. 资源推荐