ChatGPT解决这个技术问题 Extra ChatGPT

将提交推送到另一个分支

是否可以将更改从一个分支提交和推送到另一个分支。

假设我在 BRANCH1 中提交了更改并希望将它们推送到 BRANCH2。

从 BRANCH1 开始,执行以下操作是否有效:

git push origin **BRANCH2**

然后重置 BRANCH1?


i
iwasrobbed

这几乎会奏效。

推送到非默认分支时,需要指定源 ref 和目标 ref:

git push origin branch1:branch2

或者

git push <remote> <branch with new changes>:<branch you are pushing to> 

branch1branch2 都需要在遥控器上吗?如果您想从本地 branch1 推送到远程 origin branch2 怎么办?
@orad:不。第一部分实际上只是本地提交的标识符;它甚至不需要是一个分支。
@abhisekp:使用相同的语法。要引用源分支,请使用 <remote>/<branch>
@abhisekp:完全按照我刚才所说的去做。当前分支完全无关紧要。
请注意,任何试图运行 git push origin :branch2 的人(比如我自己)认为它只会将当前本地分支推送到远程 branch2,而是会删除远程 branch2!正确的方法是git push origin HEAD:branch2
i
iwasrobbed

当然,虽然它只有在 BRANCH2 的快进或者你强制它时才会起作用。做这样的事情的正确语法是

git push <remote> <source branch>:<dest branch> 

有关其工作原理的更多详细信息,请参阅 git push man page 上对“refspec”的描述。另请注意,强制推送和重置都是“重写历史记录”的操作,除非您绝对确定您知道自己在针对任何远程存储库和其他存储库做什么,否则不应胆怯尝试拥有相同项目的分叉/克隆的人。


谢谢!我只是补充一点,您可以使用 git push --force remote local-branch:remote-branch 强制执行。
B
Bilal Ahmed Yaseen

这很简单。假设您已经对驻留在本地和远程位置的分支 A 进行了更改,但您希望将这些更改推送到在任何地方都不存在的分支 B。

Step-01:创建并切换到新分支B

git checkout -b B

Step-02:在新的本地分支中添加更改

混帐添加。 //或特定文件

步骤 03:提交更改

git commit -m "commit_message"

Step-04:将更改推送到新分支B。以下命令将远程创建一个新分支B

git推送原点B

现在,您可以从 bitbucket 验证分支 B 将比分支 A 多提交一次。当您签出分支 A 时,这些更改将不存在,因为这些更改已被推送到分支 B。

注意:如果您已将更改提交到分支 A,然后您想将这些更改转移到新的分支 B,那么您必须先重置这些更改。 #快乐学习


如果分支 B 已经存在,这不起作用
@MárioHenrique 是的,很明显,'-b' 用于创建新分支,而如果分支已经存在,则可以跳过此选项。
B
Benyamin Jafari

我使用 git push origin branch1:branch2 命令得到了不好的结果:

就我而言,branch2 已被删除,而 branch1 已进行了一些新的更改。

因此,如果您只想将更改从 branch1 推送到 branch2,请尝试以下步骤:

在 branch1: git add 。

在 branch1 上: git commit -m 'comments'

在分支 1 上: git push origin branch1

在分支 2 上: git pull origin branch1

在 branch1 上:恢复到上一个提交。


您忘记添加一些命令来“恢复到上一个提交”。
@VladimirCh 只需 git checkout <the-previous-SHA-code>
J
John Doe

@SLaks 答案的道具,主要对我有用。但是在分支有不同头部的情况下。一种方便的方法是使用cherry-pick。

git log - 在 Branch1 上使用您的更改复制提交 SHA 您的更改 git checkout branch2 - 在哪里应用您的更改 git cherry-pick SHA_OF_COMMIT_FROM_STEP_2


H
HandyPawan

当您将代码推送到另一个分支时,只需遵循以下 git 命令即可。请记住 demo 是我的另一个分支名称,您可以将其替换为您的分支名称。

git push origin master:demo

B
Baalamurgan

在 BRANCH1 上提交您的更改。打开终端并输入命令 -> "git push :"

完毕。

对于这个问题:命令是“

git push origin BRANCH1:BRANCH2

t
testing

在我的情况下,我有一个本地提交,它没有被推送到 origin\master,而是提交到我的本地 master 分支。这个本地提交现在应该被推送到另一个分支。

使用 Git 扩展,您可以执行以下操作:

(如果不存在,则创建并)签出您要推送提交的新分支。

从历史中选择提交,它应该被提交并推送到这个分支。

右键单击并选择 Cherry pick commit。

之后按樱桃采摘按钮。

选定的提交获取应用到您签出的分支。现在提交并推送它。

用错误的提交检查你的旧分支。

将此分支硬重置为倒数第二次提交,一切正常(注意你在这里做什么!)。您可以通过右键单击倒数第二个提交并选择将当前分支重置到此处来执行此操作。如果您知道自己在做什么,请确认操作。

您也可以在 GIT 命令行 上执行此操作。从 David Christensen 复制的示例:

我认为您会发现 git cherry-pick + git reset 是一个更快的工作流程:使用相同的场景,“功能”是最高提交不正确的分支,这样做会容易得多: git checkout master git cherry-pick feature git checkout feature git reset --hard HEAD^ 节省了很多工作,是 git cherry-pick 旨在处理的场景。我还要注意,如果它不是最顶层的提交,这也会起作用;你只需要对cherry-pick的参数进行提交,通过: git checkout master git cherry-pick $sha1 git checkout feature git rebase -i ... # 从历史中删除特定的提交


P
Paul Irish

你可以很容易地做到这一点

git status
git add .
git commit -m "any commit"
git pull origin master 
git push origin master:development # assuming 'development' is the target branch name.

S
Srinu Mareti

git init #git remote remove origin git remote add origin echo "This is for demo" >> README.md git add README.md git commit -m "Initail Commit" git checkout -b branch1 git branch --list ****add files*** git add -A git status git commit -m "Initial - branch1" git push --set-upstream origin branch1 #git push origin --delete branch1 #git branch --unset-upstream


S
Sasa

您已提交到 BRANCH1 并希望在不丢失更改的情况下摆脱此提交? git reset 是你需要的。做:

git branch BRANCH2

如果您希望 BRANCH2 成为一个新分支。如果需要,您也可以在最后将其与另一个分支合并。如果 BRANCH2 已存在,则忽略此步骤。

然后做:

git reset --hard HEAD~3

如果要重置已提交分支上的提交。这需要最后三个提交的更改。

然后执行以下操作将重置的提交带到 BRANCH2

git checkout BRANCH2

此来源很有帮助:https://git-scm.com/docs/git-reset#git-reset-Undoacommitmakingitatopicbranch