commit
This commit is contained in:
parent
21e31863f3
commit
27a5047559
@ -159,6 +159,95 @@ ssh-keygen -c -C "new_comment" -f ssh_key_path
|
||||
git checkout -- <filename or directory>
|
||||
```
|
||||
|
||||
## 撤回(重置)本地仓库提交
|
||||
|
||||
若想把已经提交到本地仓库的提交再撤回到本地,通常有几种情况和对应的命令。最常用的是 `git reset`。
|
||||
|
||||
`git reset` 命令可以用来将当前分支的 `HEAD` 指针移动到指定的提交,并根据不同的模式来处理**暂存区**和**工作目录**。
|
||||
|
||||
- ### 1. `git reset --soft <commit>`
|
||||
|
||||
|
||||
|
||||
- **作用:** 将 `HEAD` 指针移动到指定的 `<commit>`,但**保留**工作目录和暂存区的内容。这意味着你的文件会回到该 `<commit>` 时的状态,但是你当前的修改和暂存的修改都会保留。
|
||||
|
||||
- **适用场景:** 你提交了一个 commit,但是发现提交信息写错了,或者少提交了一些文件。你可以用 `--soft` 回退到上一个 commit,然后修改文件,重新提交。
|
||||
|
||||
- **示例:**
|
||||
|
||||
```Bash
|
||||
git reset --soft HEAD~1
|
||||
```
|
||||
|
||||
这会将 `HEAD` 回退到上一个提交(`HEAD~1` 表示上一个提交)。
|
||||
|
||||
- ### 2. `git reset --mixed <commit>` (默认模式)
|
||||
|
||||
|
||||
|
||||
- **作用:** 将 `HEAD` 指针移动到指定的 `<commit>`,并**清空**暂存区,但**保留**工作目录的内容。这意味着你的文件会回到该 `<commit>` 时的状态,你当前的修改会保留在工作目录中(未暂存)。
|
||||
|
||||
- **适用场景:** 你提交了一个 commit,但是发现这个 commit 的内容不对,想撤销提交,并重新暂存和提交。
|
||||
|
||||
- **示例:**
|
||||
|
||||
```Bash
|
||||
git reset HEAD~1
|
||||
# 或者 git reset --mixed HEAD~1
|
||||
```
|
||||
|
||||
这会将 `HEAD` 回退到上一个提交,并将暂存区清空,但保留文件在工作目录。
|
||||
|
||||
|
||||
|
||||
- ### 3. `git reset --hard <commit>`
|
||||
|
||||
|
||||
|
||||
- **作用:** 将 `HEAD` 指针移动到指定的 `<commit>`,并**清空**暂存区和**丢弃**工作目录的所有修改。这意味着你的仓库会完全回到该 `<commit>` 时的状态,所有在该 `<commit>` 之后的修改都会丢失,**这是最危险的操作**。
|
||||
|
||||
- **适用场景:** 你想完全放弃当前分支上的所有最新修改和提交,回到之前的某个干净的状态。
|
||||
|
||||
- **示例:**
|
||||
|
||||
```Bash
|
||||
git reset --hard HEAD~1
|
||||
```
|
||||
|
||||
这会将 `HEAD` 回退到上一个提交,并丢弃所有工作目录和暂存区的修改。
|
||||
|
||||
|
||||
|
||||
## 如何找到 `<commit>` 的 ID?
|
||||
|
||||
|
||||
|
||||
你可以使用 `git log` 命令来查看提交历史,并找到你想要回退到的提交的哈希值(commit ID)。
|
||||
|
||||
Bash
|
||||
|
||||
```
|
||||
git log
|
||||
```
|
||||
|
||||
`git log` 会显示类似这样的信息:
|
||||
|
||||
```
|
||||
commit abcdef1234567890abcdef1234567890abcdef (HEAD -> master)
|
||||
Author: Your Name <your.email@example.com>
|
||||
Date: Fri Aug 1 13:20:00 2025 +0800
|
||||
|
||||
最新的提交
|
||||
|
||||
commit fedcba0987654321fedcba0987654321fedcba (origin/master)
|
||||
Author: Another Name <another.email@example.com>
|
||||
Date: Thu Jul 31 10:00:00 2025 +0800
|
||||
|
||||
之前的提交
|
||||
```
|
||||
|
||||
你可以复制 `commit` 后面的哈希值(例如 `fedcba0987654321...`)来替换上面的 `<commit>`。
|
||||
|
||||
## git 如何关闭commit时的语法检测 ---husky
|
||||
|
||||
1 报错提示
|
||||
@ -238,3 +327,61 @@ git config --global https.proxy 'http://127.0.0.1:代理的port'
|
||||
docker exec -u git -it -w /tmp gitea bash -c '/app/gitea/gitea dump --database postgres --config /data/gitea/conf/app.ini'
|
||||
```
|
||||
|
||||
# Sourcetree
|
||||
|
||||
这里主要介绍两种最常用的场景,对应 `git reset --soft` 和 `git reset --hard` 的效果。
|
||||
|
||||
## 撤回(重置)本地仓库提交
|
||||
|
||||
### 1. 撤销最近一次提交(保留修改以便重新提交)
|
||||
|
||||
|
||||
|
||||
这类似于 `git reset --soft HEAD~1` 或 `git reset --mixed HEAD~1` 的效果,目的是撤销提交,但保留你的文件修改。
|
||||
|
||||
1. **打开日志/历史记录:** 在 SourceTree 界面的左侧,找到你的仓库,然后点击顶部的“日志/历史”或“历史记录”选项卡。
|
||||
|
||||
2. **定位要撤销的提交:** 在提交历史列表中,找到你想撤销的**前一个**提交(也就是你希望回退到的那个提交)。
|
||||
|
||||
3. **右键点击并选择:** 右键点击该提交。
|
||||
|
||||
4. **选择“将当前分支重置到此提交”:** 在弹出的菜单中选择 **“将当前分支重置到此提交”** (Reset current branch to this commit)。
|
||||

|
||||
|
||||
5. **选择重置模式:** 此时会出现一个弹窗,让你选择重置模式:
|
||||
|
||||
- **Soft(软重置)**:勾选这个选项。它会将 `HEAD` 指针移动到选定的提交,**保留**工作目录和暂存区的内容。这意味着你的修改还在,只是不再是提交的一部分。
|
||||
- **Mixed(混合重置)**:这是默认选项。它会将 `HEAD` 指针移动到选定的提交,**清空**暂存区,但**保留**工作目录的内容。
|
||||
- **注意:** 如果你只想撤销提交,并打算修改后重新提交,通常选择 **Soft** 或 **Mixed** 都可以,根据你是否希望文件保留在暂存区。对于“撤回本地仓库提交”这个需求,通常是希望保留修改以便重新操作。
|
||||
|
||||

|
||||
|
||||
6. **确认:** 点击“确定”或“Reset”按钮。
|
||||
|
||||
完成这些步骤后,你会发现最新的那个提交消失了,而你工作目录中的文件依然保留了修改内容,你可以重新暂存并提交。
|
||||
|
||||
------
|
||||
|
||||
|
||||
|
||||
### 2. 彻底撤销最近一次提交(丢弃所有修改)
|
||||
|
||||
|
||||
|
||||
这类似于 `git reset --hard HEAD~1` 的效果,会完全丢弃最近提交的所有修改。**请务必谨慎使用此选项,因为它会丢失数据!**
|
||||
|
||||
1. **打开日志/历史记录:** 同样,在 SourceTree 中打开“日志/历史”选项卡。
|
||||
2. **定位要撤销的提交:** 找到你想撤销的**前一个**提交。
|
||||
3. **右键点击并选择:** 右键点击该提交。
|
||||
4. **选择“将当前分支重置到此提交”:** 在弹出的菜单中选择 **“将当前分支重置到此提交”** (Reset current branch to this commit)。
|
||||
5. **选择重置模式:** 在弹窗中,选择 **“Hard(硬重置)”**。
|
||||
6. **确认:** 点击“确定”或“Reset”按钮。SourceTree 还会再次弹出警告,提醒你这将丢失数据,请确认。
|
||||
|
||||
执行此操作后,你的仓库状态会完全回溯到选定的提交,所有后续的修改和提交都将消失。
|
||||
|
||||
------
|
||||
|
||||
|
||||
|
||||
- **未推送的提交:** 上述操作主要用于**尚未推送到远程仓库**的本地提交。如果你已经将提交推送到远程,使用 `git reset` 会导致本地和远程历史不一致,从而引发问题。对于已推送的提交,通常应该使用 **“逆转提交”(Revert Commit)**,它会创建一个新的提交来撤销之前的修改,而不是改写历史。
|
||||
- **Revert(逆转)操作:** 如果你希望逆转某个已推送的提交,可以在 SourceTree 中右键点击该提交,然后选择 **“逆转提交 <哈希值>”** (Revert commit <hash>)。这会创建一个新的提交来撤销该提交的修改,并且不会改变历史,是更安全的选择。
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user