git

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
git [2025/11/17 15:34] – [生成后事件] 张叶安git [2025/12/18 16:38] (当前版本) 张叶安
行 1: 行 1:
-git 回滚版本+====== git 回滚版本 ======
  
-1. 查看历史版本+  - 查看历史版本
  
-``` +<code bash> 
-git log -oneline +git log --oneline 
-```+</code>
  
-``` 
 结果示例: 结果示例:
-``` 
  
-```+<code>
 c1d3a72 (HEAD -> main)  修复楼层映射界面逻辑 c1d3a72 (HEAD -> main)  修复楼层映射界面逻辑
 a5b4c11                 增加批量导入功能 a5b4c11                 增加批量导入功能
 a14de22                 初次提交 a14de22                 初次提交
-```+</code>
  
-2. 回滚到c1d3a72 次的commit+  - 回滚到 c1d3a72 次的 commit
  
-```+<code bash>
 git reset --hard c1d3a72 git reset --hard c1d3a72
-```+</code>
  
-git 提交到本地+====== git 提交到本地 ======
  
-```+<code bash>
 git add . git add .
 git commit -m "提交备注" git commit -m "提交备注"
-```+</code>
  
-git 提交到仓库+====== git 提交到仓库 ======
  
-```+<code bash>
 git push git push
-``` +</code>
-# 生成后事件+
  
 +====== 生成后事件 ======
  
- +搜 ''Post'',输入
-`Post`,输入+
  
 {{pasted:20251117-153425.png}} {{pasted:20251117-153425.png}}
  
-```+<code batch>
 call ./del.bat call ./del.bat
-```+</code>
  
-然后在根目录放一个`del.bat`文件,文件格式`UTF-8`+然后在根目录放一个 ''del.bat'' 文件文件格式 **UTF-8**。
  
-内容如下,自己看着改: +内容如下自己看着改:
- +
-```+
  
 +<code batch>
 del ".\bin\Debug\net48\xxx.dll" del ".\bin\Debug\net48\xxx.dll"
 del ".\bin\Debug\net48\ccc.dll" del ".\bin\Debug\net48\ccc.dll"
-```+</code> 
 + 
 +====== Git 回滚后清理多余代码 ====== 
 + 
 +当你使用 ''git reset'' 回滚版本后,工作区可能仍保留着新版本中创建但旧版本中不存在的文件(即“未追踪的文件”)。要彻底清理这些多余文件,只保留当前版本的代码,你需要使用 **git clean** 命令。 
 + 
 +===== 1. 确保版本已重置 ===== 
 + 
 +首先,确保你的**已追踪文件**(Tracked Files)已经强制重置到了目标版本。 
 + 
 +<code bash> 
 +# 注意:--hard 会丢弃所有未提交的修改 
 +git reset --hard <你的目标CommitID> 
 +</code> 
 + 
 +===== 2. 清理多余文件 (git clean) ===== 
 + 
 +''git clean'' 用于从工作区中删除未被追踪的文件。 
 + 
 +==== 2.1 第一步:安全检查(强烈推荐) ==== 
 + 
 +在真正删除之前,先查看一下哪些文件会被删除,防止误删重要的配置文件(如 ''.env'' 或 IDE 配置)。 
 + 
 +<code bash> 
 +git clean -nfd 
 +</code> 
 + 
 +  * **-n**: (Dry run) 演习模式,不实际删除,只列出会被删除的文件。 
 +  * **-f**: (Force) 强制模式,Git 默认需要此参数才允许删除。 
 +  * **-d**: (Directory) 同时移除未被追踪的**文件夹**。 
 + 
 +==== 2.2 第二步:执行删除(标准做法) ==== 
 + 
 +确认上面的列表没问题后,执行以下命令。这将删除多余代码,但**保留** ''.gitignore'' 中忽略的文件(如编译缓存、依赖包)。 
 + 
 +<code bash> 
 +git clean -fd 
 +</code> 
 + 
 +==== 2.3 可选:彻底清理(包含构建产物) ==== 
 + 
 +如果你想让项目回到“刚 Clone 下来”的纯净状态,连同编译生成的文件(Ignored files)一起删掉: 
 + 
 +<code bash> 
 +git clean -fdx 
 +</code> 
 + 
 +  * **-x**: 同时也删除被 ''.gitignore'' 忽略的文件。 
 +  * **警告**:这会删除你的 IDE 配置文件、编译输出、依赖包(如 ''node_modules''),执行后通常需要重新 build。 
 + 
 +====== Git: 强制拉取远端 Master 分支 (忽略本地更改) ====== 
 + 
 +本指南介绍如何强制将本地仓库重置为与远端 `master分支完全一致的状态。 
 + 
 + 
 +**警告:** 执行此操作将**永久丢失**所有未提交(Uncommitted)的更改以及本地已经提交但未推送到远端的更改。请在执行前确保你不需要保留这些更改,或者已经做好了备份。 
 + 
 + 
 +===== 操作步骤 ===== 
 + 
 +要强制覆盖本地更改,我们需要分两步走:首先从远端获取最新信息,然后强制重置本地分支。 
 + 
 +==== 1. 获取远端最新状态 ==== 
 + 
 +首先,我们需要从远端仓库(通常命名为 `origin`)下载最新的分支信息,但暂时不合并到本地。 
 + 
 +<code bash> 
 +git fetch --all 
 +</code> 
 + 
 +  * **git fetch**: 从远端下载对象和引用。 
 +  * **--all**: 如果定义了多个远端仓库,此选项会从所有远端获取。 
 + 
 +==== 2. 强制重置本地 Master 分支 ==== 
 + 
 +接下来,我们将本地的 `master` 分支指针强制移动到远端的 `origin/master` 位置。 
 + 
 +<code bash> 
 +git reset --hard origin/master 
 +</code> 
 + 
 +  * **git reset**: 重置当前 HEAD 到指定状态。 
 +  * **--hard**: 重置索引(Index)和工作树(Working Tree)。这意味着**所有**自上次提交以来的更改都会被丢弃,文件将完全匹配 `origin/master` 的状态。 
 +  * **origin/master**: 这是我们刚刚通过 `git fetch` 获取的远端分支的引用。 
 + 
 +==== 3. (可选) 清理未追踪的文件 ==== 
 + 
 +上述 `reset --hard` 命令只会影响 Git 追踪的文件。如果你在本地创建了新文件(Git 未追踪的文件),它们仍然会存在。如果你想让目录变得完全干净(和刚克隆下来一样),可以运行以下命令: 
 + 
 +<code bash> 
 +git clean -fdx 
 +</code> 
 + 
 +  * **-f**: 强制删除。 
 +  * **-d**: 删除未被追踪的目录。 
 +  * **-x**: 删除被忽略的文件(即 `.gitignore` 中指定的文件,如编译产物、日志等)。 
 + 
 +===== 总结脚本 ===== 
 + 
 +你可以将这些命令组合成一个序列快速执行: 
 + 
 +<code bash> 
 +git fetch --all 
 +git reset --hard origin/master 
 +# 慎用下面这行,除非你确定要删除所有未追踪文件 
 +# git clean -fdx  
 +</code> 
 + 
 +===== 常见问题 ===== 
 + 
 +  * **如果我的分支不叫 master 怎么办?** 
 +    * 如果你的主分支叫 `main`,请将命令中的 `master` 替换为 `main`: 
 +    <code bash>git reset --hard origin/main</code> 
 + 
 +  * **这会删除我本地新建的分支吗?** 
 +    * `git reset --hard` 只会影响**当前检出**的分支。如果你在 `master` 分支上执行此操作,其他本地分支(如 `feature-login`)不会受到影响。但是,如果那些分支是基于旧的 `master` 创建的,它们可能会与新的 `master` 产生分歧。 
 + 
 +====== Git 实战:将 A 分支内容完全覆盖到 B 分支 ====== 
 + 
 +**场景描述**: 
 +你当前处于 **A 分支**。你希望 **B 分支** 的内容变得和 A 分支**一模一样**(完全丢弃 B 分支旧有的差异),操作完成后,自动切换到 **B 分支** 继续工作。 
 + 
 +这通常用于重置某个测试分支,或者强制同步代码。 
 + 
 +===== 方法一:强制重置 (推荐,最干净) ===== 
 + 
 +这种方法会将 B 分支的指针直接指向 A 分支当前的提交,这是最彻底的“一模一样”。 
 + 
 +**步骤如下:** 
 + 
 +  - 1. 确保你当前在 A 分支。 
 +  - 2. 强制删除本地的 B 分支(如果存在)。 
 +  - 3. 基于当前 A 分支重新创建 B 分支。 
 +  - 4. 切换到 B 分支。 
 + 
 +<code bash> 
 +# 1. 确认当前所在分支 (假设显示 * A) 
 +git branch 
 + 
 +# 2. 如果 B 分支已经存在,先删除它 (使用 -D 强制删除,忽略未合并警告) 
 +git branch -D B 
 + 
 +# 3. 基于当前所在位置(A) 新建并切换到 B 分支 
 +git checkout -b B 
 +</code> 
 + 
 +**原理解析**: 
 +你并没有“移动文件”,而是直接把 B 的标签贴到了 A 当前所在的提交记录上。此时 A 和 B 指向同一个 Commit ID,内容自然完全一致。 
 + 
 +===== 方法二:在 B 分支上硬重置 (Hard Reset) ===== 
 + 
 +如果你不想删除分支(例如 B 分支设置了特定的上游追踪关系),可以使用此方法。 
 + 
 +**步骤如下:** 
 + 
 +  - 1. 切换到 B 分支。 
 +  - 2. 将 B 分支重置为 A 分支的状态。 
 + 
 +<code bash> 
 +# 1. 先切换到 B 分支 
 +git checkout B 
 + 
 +# 2. 将 B 分支强制重置为 A 分支的内容 
 +# 注意:这会永久丢弃 B 分支上原本比 A 多出的任何提交! 
 +git reset --hard A 
 +</code> 
 + 
 +===== 方法三:推送时强制覆盖 (针对远程分支) ===== 
 + 
 +如果你的 B 分支是在远程仓库(比如 origin/B),你想让远程的 B 变得和本地 A 一样。 
 + 
 +<code bash> 
 +# 确保你在 A 分支 
 +git checkout A 
 + 
 +# 强制推送到远程的 B 分支 
 +# 语法:git push <远程仓库名> <本地分支>:<远程分支> --force 
 +git push origin A:B --force 
 +</code> 
 + 
 +**警告**: 
 +使用 ``git reset --hard`` 或 ``git branch -D`` 都是破坏性操作。执行前请确保 **B 分支上没有你需要的、未备份的代码**。 
 + 
 +===== Git统计几个版本间累计修改的文件 ===== 
 + 
 +<code> 
 +git diff --name-only 版本A 版本B 
 +</code> 
 + 
 +===== git切换回旧版本测试后再回来 ===== 
 +<code> 
 +git checkout 版本号如767ddd7d 
 +</code> 
 + 
 +<code> 
 +git checkout 分支号如sdf_dev 
 +</code> 
 + 
 + 
 + 
 + 

该主题尚不存在

您访问的页面并不存在。如果允许,您可以使用创建该页面按钮来创建它。

  • git.1763364888.txt.gz
  • 最后更改: 2025/11/17 15:34
  • 张叶安