git

差别

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

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
git [2025/11/28 09:30] 张叶安git [2025/12/18 16:38] (当前版本) 张叶安
行 105: 行 105:
 本指南介绍如何强制将本地仓库重置为与远端 `master` 分支完全一致的状态。 本指南介绍如何强制将本地仓库重置为与远端 `master` 分支完全一致的状态。
  
-<note warning>+
 **警告:** 执行此操作将**永久丢失**所有未提交(Uncommitted)的更改以及本地已经提交但未推送到远端的更改。请在执行前确保你不需要保留这些更改,或者已经做好了备份。 **警告:** 执行此操作将**永久丢失**所有未提交(Uncommitted)的更改以及本地已经提交但未推送到远端的更改。请在执行前确保你不需要保留这些更改,或者已经做好了备份。
-</note>+
  
 ===== 操作步骤 ===== ===== 操作步骤 =====
行 167: 行 167:
   * **这会删除我本地新建的分支吗?**   * **这会删除我本地新建的分支吗?**
     * `git reset --hard` 只会影响**当前检出**的分支。如果你在 `master` 分支上执行此操作,其他本地分支(如 `feature-login`)不会受到影响。但是,如果那些分支是基于旧的 `master` 创建的,它们可能会与新的 `master` 产生分歧。     * `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.1764293430.txt.gz
  • 最后更改: 2025/11/28 09:30
  • 张叶安