我已经对不同的文件进行了多次提交,但到目前为止,我想将我的远程存储库推送到特定的提交。
这可能吗?
答案 0 :(得分:942)
要通过向上推送给定的提交,您可以写:
git push <remotename> <commit SHA>:<remotebranchname>
已提供<remotebranchname>
已存在于遥控器上。 (如果没有,您可以使用git push <remotename> <commit SHA>:refs/heads/<remotebranchname>
自动创建它。)
如果你想在没有推送先前提交的情况下推送提交,你应该首先使用git rebase -i
来重新提交提交。
答案 1 :(得分:140)
尝试了建议的解决方案:
git push <remotename> <commit SHA>:<remotebranchname>
git push origin 712acff81033eddc90bb2b45e1e4cd031fefc50f:master
在我的情况下,master提前5次提交,我只是想推送我的最后一次提交,但上面的内容最终将我的所有更改推送到包括命名提交。在我看来,樱桃挑选方法可能是这个用例的更好方法。
答案 2 :(得分:62)
其他答案缺少重新排序的说明。
git push <remotename> <commit SHA>:<remotebranchname>
将推送单个提交,但该提交必须是本地,非推送,提交的OLDEST,不要与top,first或tip提交混淆,在我看来这些都是模棱两可的描述。提交需要最早的提交,即距离您最近的提交最远的提交。如果它不是最早的提交,则将推送从最旧的,本地的,未推送的SHA到指定的SHA的所有提交。要重新排序提交,请使用:
git rebase -i HEAD~xxx
重新排序提交后,您可以安全地将其推送到远程存储库。
总结一下,我用了
git rebase -i HEAD~<number of commits to SHA>
git push origin <post-rebase SHA>:master
将单个提交推送到我的远程主分支。
参考文献:
答案 3 :(得分:25)
我建议使用git rebase -i
;将您想要提交的提交移动到您所做的提交的顶部。然后使用git log
获取重新提交的提交的SHA,检查它并推送它。 rebase将确保您所有其他提交现在都是您推送的提交的子项,因此未来的推送也可以正常工作。
答案 4 :(得分:20)
在推送特定提交时,Cherry-pick与所有其他方法相比效果最佳。
这样做的方法是:
创建一个新分支 -
git branch <new-branch>
使用您的原始分支更新您的新分支 -
git fetch
git rebase
这些操作将确保您完全拥有与原点相同的内容。
樱桃挑选你要推进的sha id
-
git cherry-pick <sha id of the commit>
您可以通过
获取sha id
git log
将它推到原点 -
git push
运行gitk
,看看所有内容都与您想要的一样。
答案 5 :(得分:11)
我相信你必须“git revert”回到那个提交然后推送它。或者您可以cherry-pick
提交到新分支,并将其推送到远程存储库上的分支。类似的东西:
git branch onecommit
git checkout onecommit
git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544 # From the other branch
git push origin {branch}
答案 6 :(得分:1)
最简单的方法是使用两个命令。
首先,使本地目录进入所需状态。然后,
$ git push origin +HEAD^:someBranch
仅从远程(而非本地)中的someBranch
中删除最后一次提交。您可以连续几次执行此操作,也可以更改+HEAD^
以反映您要批量从远程删除的提交数量。现在,您重新站起来,并使用
$ git push origin someBranch
正常更新遥控器。
答案 7 :(得分:0)
您也可以在另一个目录中
答案 8 :(得分:0)
我确实想忘记一个古老的历史,并从我选择的新提交开始:
with open('mac.txt', 'w') as mac:
print(str(os.system('arp -a')
现在对旧仓库进行更改时,我可以将补丁应用于新仓库,以将它们重新构建在新仓库上。