Git 如果没有以前的提交,如何将特定的提交推送到远程?

Git 如果没有以前的提交,如何将特定的提交推送到远程?,git,Git,我在本地存储库中提交代码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 但这也推

我在本地存储库中提交代码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

您需要首先提交分支,以便使commit2成为
origin/yourbrange
之后的第一次提交

 x--x--C1--C2--C3 (B)
    |
  (origin/B)

git rebase -i C1~

 x--x--C2'--C1'--C3' (B)
    |
  (origin/B)
然后你可以推送那个提交

见“”:

git推送:
#范例
git推送原点712ACFF81033EDDC90BB2B45E1E4CD031EFC50F:主
它会将所有提交推送到并包括您选择的提交。
但是由于您的提交是第一个提交,它只会推动该提交



我不建议使用cherry pick,因为它会更改推送的提交的SHA1:当您最终推送完整分支时,您将得到重复的提交。

您也可以使用
cherry pick
进行此操作,但具有未推送提交的本地分支将从远程分支转移


怎么做?
#将cd放入项目文件夹中
#基于原始分支创建新分支(远程中的最新代码)
git签出-b源/主
#“抓取”您希望使用的提交
吉特樱桃采摘
#现在,您的分支包含所需的提交。
#把它推回遥控器。
############################################################################
###注意:如果试图将其推回####,则可能无法推动
###大师。要修复它,您可能需要重命名原始主控形状###
###然后将新的barch重命名为master###
############################################################################

Hey的可能重复,这在我的站点不起作用,我在本地提交了5次,我已将我的头设置为c3。当我试着推动c3时,除了c3,c1和c2也被推动。我只希望c3必须被放到远程服务器上,而不是c1和c2。@MaazPatel这意味着你没有像我在回答中描述的那样重新设置基础。如果您这样做,
C3
将不会将
C2
C1
作为父级。您可以对提交进行排序,以使您要推送的提交(
C3
在您的情况下,
C2
在我的回答中)具有作为父级的
origin/B
git push <remotename> <commit SHA>:<remotebranchname>
# Example
git push origin 712acff81033eddc90bb2b45e1e4cd031fefc50f:master
# 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                   ###
############################################################################