Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 如何选择特定的提交并将其推送到另一个分支?_Git - Fatal编程技术网

Git 如何选择特定的提交并将其推送到另一个分支?

Git 如何选择特定的提交并将其推送到另一个分支?,git,Git,TL;DR 我可以将我所做的更改(即对代码3和代码4所做的更改)推到我们的UAT分支中,而不涉及developer1所做的更改(代码1、代码2和我的js.js)吗 我认为我的情况最好用一个例子来解释 开发人员通常在包含7个文件的dev分支上工作 code1.php code2.php code3.php code4.php code5.php my-js.js my-css.css 项目中有3名开发人员 developer1 = able to push new branches but n

TL;DR

我可以将我所做的更改(即对代码3和代码4所做的更改)推到我们的UAT分支中,而不涉及developer1所做的更改(代码1、代码2和我的js.js)吗


我认为我的情况最好用一个例子来解释

开发人员通常在包含7个文件的dev分支上工作

code1.php
code2.php
code3.php
code4.php
code5.php
my-js.js
my-css.css
项目中有3名开发人员

developer1 = able to push new branches but not able to merge into any branch
developer2 = same access as developer1
developer3 = me. I have admin access to the repository. If developer1 and 2 needs to merge changes to the dev branch, they send it my way for approval
出现了一个新问题,并将其分配给developer1。developer1git通过远程开发分支获取最新代码。然后他创建了一个新的本地分支,名为“jira-TICKT1”,并对文件code1和code2进行了更改。他还对my-js.js进行了更改

出现了另一个问题(jira-TICKT2),这个问题被分配给了developer2。他还将git拉到远程开发分支上,然后创建了一个名为“jira-TICKT2”的新本地分支,并对代码5进行了更改

最后,只有developer1完成了。他将他的新分支推送到我们的远程存储库中,然后创建了一个请求,供我批准。我在收到请求5分钟后批准了请求

第二天早上,发生了一件紧急的事情(jira-TICKT3),这件事交给了我。这张票要求我更改代码3和代码4。在开始工作之前,我还做了一次git拉取(从而获得develop1所做的更改)。我还创建了一个新分支,然后在完成更改后推动并批准我的更改

由于问题的紧迫性,测试人员只能测试我的更改,他已批准将其转到我们的UAT分支

现在我的问题

我是否可以将我所做的更改(即对代码3和代码4所做的更改)推入我们的UAT分支,而不涉及developer1所做的更改

通常显示在本地存储库中的唯一分支是dev和我自己的分支


另外,我读过几个“类似”的问题,但我不确定这是否适用于我的情况。

我们处理这件事的方式是票务部门。假设原始树是:

A-B
在拉取请求之后,您将

A-B-C
对于包含更改的C(使用git讨论提交比讨论文件更容易),现在出现了一些紧急情况,您不能使用C代码。签出B(使用hash或HEAD~1)、分支并提交修复:

A-B-C  <-Master
   -D  <-Ticket branch
当然,您可以将pull请求更改为坐在master上,然后再坐在master上

git reset --hard <hash of B commit>
现在这棵树是:

A-B(<-UAT)-C <- tempbranch
树:

现在你有:

A-B-C <- Some temp branch
   -D <-Master now
A-B-C <-UAT
A-B-D-C

推。

你能做一个tl;这是什么版本?如果您想选择特定的提交,我有一个答案,我们处理这个问题的常用方法是票证分支,它将在稍后合并-这不是一个好的解决方案吗?在提交1之前分支。@Alien先生刚刚做了。谢谢@卡巴纳斯你能解释一下售票处吗?当我批准developer1所做的提交时,我无法知道我将收到一个与jira-TICKT1无关的紧急请求。@JayViper先生说您有两个分支,master和branch1,现在您在master中提交了多个提交,并且您只想选择特定的提交,您可以先签出到master分支,然后使用git cherry pick HASH\u ID\u OF_BRANCH1\u COMMIT,这将只拾取BRANCH1的特定COMMIT,并将其放入主分支。希望你能理解。你好。我们使用一个称为UAT的分支进行UAT测试。如何将我的提交(在您的示例中是D)合并到此UAT分支?我们的自动编译器的设置方式总是选择UAT分支。我展示了一个rebase解决方案。你也可以合并,如果你已经按下了
C
,那会更安全。似乎这只会在我按下“B”时起作用?如果developer1得到另一个任务,他不知道如何使用git pull,但只是获取最新的任务怎么办?在我的图片中,每个人都从A和B开始。你最终必须使用C,因为它已经对每个人可用。我建议将你的修复提交到temp(bug fix)分支,而不是master,然后稍后推动合并。
A-B(<-UAT)-C <- tempbranch
git commit -a -m"My changes"
A-B-C <-tempbranch
   \
     D<-UAT
git checkout tempbranch
git rebase UAT
git checkout master
git merge tempbranch
git branch -D tempbranch #Not needed!
A-B-D-C