如何仅将我的最新提交与 git 同步?
How to sync only my latest commit with git?
我的本地存储库比远程存储库领先 2 个提交 - 提交 A 和提交 B。
提交 A 先进行,意外包含一个非常大的文件,该文件太大而无法暂存并导致 push
失败。
所以,我删除了文件,取消跟踪它,然后提交 B。但是,我不能 push
提交 B,因为提交 A 和 B 都试图 push
,这导致在推送 B 之前提交 A 导致相同的失败。
有什么方法可以告诉 git 忽略这两个提交中的第一个吗?或者 "delete" 提交 A?
你可以使用 cherry-pick
.
假设您的远程分支是 master
并且您的两个提交的分支是 master-plus-a-and-b
:
git checkout master
git checkout -b master-plus-b
git cherry-pick master-plus-a-and-b
现在 master-plus-b
只有 master
的提交和提交 b,没有提交 a。您可能必须在 cherry-pick
过程中清除任何冲突。
也许您可以重置所有提交并重新开始,使用干净的堆栈。
git reset --soft HEAD~2
然后 git commit -am "cleaned commit"
.
另一种选择是git rebase -i HEAD^^
。如果您将提交 A 和 B 压缩在一起,那么在有问题的文件的最终提交中将不会有任何记录。如果您愿意,这种方法还可以让您有机会将提交 A 的一些原始提交消息回收到新的结果提交中。
我的本地存储库比远程存储库领先 2 个提交 - 提交 A 和提交 B。
提交 A 先进行,意外包含一个非常大的文件,该文件太大而无法暂存并导致 push
失败。
所以,我删除了文件,取消跟踪它,然后提交 B。但是,我不能 push
提交 B,因为提交 A 和 B 都试图 push
,这导致在推送 B 之前提交 A 导致相同的失败。
有什么方法可以告诉 git 忽略这两个提交中的第一个吗?或者 "delete" 提交 A?
你可以使用 cherry-pick
.
假设您的远程分支是 master
并且您的两个提交的分支是 master-plus-a-and-b
:
git checkout master
git checkout -b master-plus-b
git cherry-pick master-plus-a-and-b
现在 master-plus-b
只有 master
的提交和提交 b,没有提交 a。您可能必须在 cherry-pick
过程中清除任何冲突。
也许您可以重置所有提交并重新开始,使用干净的堆栈。
git reset --soft HEAD~2
然后git commit -am "cleaned commit"
.
另一种选择是git rebase -i HEAD^^
。如果您将提交 A 和 B 压缩在一起,那么在有问题的文件的最终提交中将不会有任何记录。如果您愿意,这种方法还可以让您有机会将提交 A 的一些原始提交消息回收到新的结果提交中。