如何提取压缩的提交

How to pull squashed commit

假设我有分支机构、两个 git 客户端和 git 服务器。最初所有这些都有两个提交(ab):

client1:  ...--a--b
client2:  ...--a--b
server:   ...--a--b

我压缩了 client1 上的最后两次提交(假设现在是 c)并做了 git push --force,所以现在分支看起来像:

client1: ...--c
client2: ...--a--b
server:  ...--c

问题来了:如何在 client2 上进行这些更改? git pull --force 想在 client2 上合并,但我只想拉取更改,因此 client2 上的分支看起来也像:

client2: ...--c

不完全是您要问的,但完成它的一种方法是删除客户端 2 上的 project/branch,然后再次检出远程 branch/project。 这也说明了为什么您不想在已经推送提交时重写历史记录(即推送力)。

你必须在上游获取然后重置:

git fetch
git checkout <appropriate branch>
git reset --hard @{upstream}

它将在其远程副本所做的同一提交中创建所述本地分支点。

作为旁注,以防万一您可能后悔提交 ab,您也可以事先使用

进行备份
git branch <backup-name> <your-current-branch>