我使用
在本地存储库中提交了2次或更多次代码git commit -m "message 1"
git commit -m "message 2"
git commit -m "message 3"
现在我有三个提交跟随SHA
commit-1 SHA1
commit-2 SHA2
commit-3 SHA3
但我想使用git push在远程存储库中仅推送commit-2
如果我运行git push,它将推送所有提交。
我还尝试了以下命令:
git push SHA2
但这也推动了所有提交。
如何在远程存储库中仅推送commit-2
?
答案 0 :(得分:7)
首先需要git rebase -i
您的分支,以便在origin/yourBranch
之后使commit2成为第一个提交。
x--x--C1--C2--C3 (B)
|
(origin/B)
git rebase -i C1~
x--x--C2'--C1'--C3' (B)
|
(origin/B)
然后你可以推送那个提交。
请参阅“git - pushing specific commit”:
git push <remotename> <commit SHA>:<remotebranchname>
# Example
git push origin 712acff81033eddc90bb2b45e1e4cd031fefc50f:master
它确实推送所有提交,包括您选择的提交 但由于你的提交是第一个提交,它只会推送提交。
我不建议采摘樱桃,因为它更改了提交的提交的SHA1:当你最终推送完整的分支时,你最终会有重复的提交。
答案 1 :(得分:-1)
您也可以使用cherry-pick
来执行此操作,但使用未提交的提交的本地分支将从您的远程分支转移。
# cd into your project folder
# create new branch based on the origin branch (latest code in remote)
git checkout -b <new branch> origin/master
# "grab" the commit you wish to use
git cherry-pick <SHA-1>
# now your branch contains the desired commit.
# push it back to your remote.
############################################################################
### Note: you might not be able to push if you try to push it back to ###
### master. To fix it you might need to rename the original master ###
### and your then rename the new barch to master ###
############################################################################