Git-2025-0818

2. git 常用命令

|-------------------------------------------------------------------------------------------|----------------------|
| 命令 | 说明 |
| git add | 添加文件到暂存区 |
| git status | 查看仓库当前的状态,显示有变更的文件。 |
| git diff | 比较文件的不同,即暂存区和工作区的差异。 |
| git difftool | 使用外部差异工具查看和比较文件的更改。 |
| git range-diff | 比较两个提交范围之间的差异。 |
| git commit | 提交暂存区到本地仓库。 |
| git reset | 回退版本。 |
| git rm | 将文件从暂存区和工作区中删除。 |
| git mv | 移动或重命名工作区文件。 |
| git notes | 添加注释。 |
| git checkout | 分支切换。 |
| git switch(Git 2.23 版本引入) | 更清晰地切换分支。 |
| git restore(Git 2.23 版本引入) | 恢复或撤销文件的更改。 |
| git show | 显示 Git 对象的详细信息。 |

在 Git 中,`git checkout -b 目标分支 origin/目标分支` 这个命令用于从远程仓库的特定分支创建一个新的本地分支,并切换到该新分支上。这个命令实际上是两个 Git 命令的组合:

  1. `git checkout -b 目标分支`:创建并切换到一个新分支。

  2. `git branch 目标分支 origin/目标分支`:将远程分支设置为新创建的本地分支的上游(tracking branch)。

git checkout -b 目标分支 origin/目标分支

这里的 `目标分支` 是你想要创建和切换到的本地分支的名称,而 `origin/目标分支` 是远程仓库中对应的分支名称。这个命令的意思是:

  • 从远程仓库的 `origin/目标分支` 分支检出(checkout)一个新的本地分支。

  • 创建一个新的本地分支,并命名为 `目标分支`。

  • 设置新创建的本地分支跟踪远程的 `origin/目标分支` 分支。

执行这个命令后,你将会在本地有一个新分支,并且这个分支会自动设置为跟踪远程仓库中的对应分支。这样,当你在本地分支上进行提交时,可以通过 `git push` 将更改推送到远程分支,也可以通过 `git pull` 从远程分支拉取最新的更改。

  • 提交日志

|-----------------------------------------------------------------------------------------------------|-------------------------------------|
| 命令 | 说明 |
| git log | 查看历史提交记录 |
| git blame <file> | 以列表形式查看指定文件的历史修改记录 |
| git shortlog | 生成简洁的提交日志摘要 |
| git describe | 生成一个可读的字符串,该字符串基于 Git 的标签系统来描述当前的提交 |

  • 远程操作

|--------------------------------------------------------------------------------|------------------|
| 命令 | 说明 |
| git remote | 远程仓库操作 |
| git fetch | 从远程获取代码库 |
| git pull | 下载远程代码并合并 |
| git push | 上传远程代码并合并 |
| git submodule | 管理包含其他 Git 仓库的项目 |

3. 分支管理

Git 分支管理是 Git 强大功能之一,能够让多个开发人员并行工作,开发新功能、修复 bug 或进行实验,而不会影响主代码库。几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。

  • 创建分支

创建新分支并切换到该分支:

git checkout -b <branchname>

例如:git checkout -b feature-xyz

切换分支命令:

git checkout (branchname)

例如:git checkout main

当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。

  • 查看分支

|-------------|---------------|---|
| 查看所有分支 | git branch | |
| 查看远程分支 | git branch -r | |
| 查看所有本地和远程分支 | git branch -a | |

  • 合并分支

将其他分支合并到当前分支:

git merge <branchname>

例如,切换到 main 分支并合并 feature-xyz 分支:

复制代码
git checkout main
git merge feature-xyz
  • 解决合并冲突

当合并过程中出现冲突时,Git 会标记冲突文件,你需要手动解决冲突。

打开冲突文件,按照标记解决冲突。

标记冲突解决完成:git add <conflict-file>

提交合并结果:git commit

  • 删除分支

|------------|-----------------------------------------|
| 删除本地分支 | git branch -d <branchname> |
| 强制删除未合并的分支 | git branch -D <branchname> |
| 删除远程分支 | git push origin --delete <branchname> |

二、在IDEA中使用Git

安装好IntelliJ IDEA后,如果Git安装在默认路径下,那么idea会自动找到git的位置,如果更改了Git的安装位置则需要手动配置下Git的路径。选择File→Settings打开设置窗口,找到Version Control下的git选项:

  • 从远程仓库clone项目:
  • 创建分支:

以某个分支为基础创建分支:

  • 提交变更代码:
  • push至远程仓库
  • Merge分支

如何回退到历史版本

进行大量修改和多次commit之后,发现改错了;(特别是误删除了某些重要文件)

Q:如何回退到历史上的某个版本;

A:git-reset

不小心回退多了

开发过程中,偶尔会用回退操作;

Q:不小心回滚多了,代码还能找回吗?

A:git-reflog + git-reset

commit 到了错误的分支上

本应该在A分支上进行开发的,结果因为操作失误,把新增/修改的代码提交到了B分支上;

Q:不想重写一遍代码,怎么办?

A:git-cherry-pick

合并了别人的分支,又不想要了

在开发过程中,合并另一个分支到自己的开发分支是不可避免的,如果不小心合错了分支,然后又进行了多次代码修改并commit;

Q:我的分支还有救吗?

A:git-rebase