TL; DR
我是否可以在不触及developer1(code1,code2和my-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。 Developer1 git在远程dev分支上拉取以获取最新代码。然后他创建了一个名为“jira-ticket1”的新本地分支,并对文件code1和code2进行了更改。他还对my-js.js进行了更改
出现了另一个问题(jira-ticket2),并将其分配给了developer2。他还在远程dev分支上进行了git,然后创建了一个名为“jira-ticket2”的新本地分支,并对code5进行了更改。
在一天结束时,只有developer1已经完成。他将他的新分支推入我们的远程存储库,然后创建了一个拉取请求让我批准。我在收到请求后5分钟批准了拉取请求。
第二天早上,紧急事件(jira-ticket3)出现了,这是分配给我的。此票证要求我对code3和code4进行更改。在开始工作之前我也做了一个git pull(从而获得了develop1所做的更改)。我还创建了一个新分支,然后在完成后推送并批准了我的更改。
由于问题的紧迫性,测试人员只能测试我的更改,他已批准它去我们的UAT分支
现在我的问题
我可以将我所做的更改(即对code3和code4所做的更改)推入我们的UAT分支而不触及developer1所做的更改吗?
通常在我的本地存储库中显示的唯一分支是dev和我自己的分支。
PS。我已经阅读了几个“类似”的问题,但我不确定这是否适用于我的情况。
答案 0 :(得分:1)
我们处理这个的方式是一个票务分支。假设原始树是:
A-B
拉动请求后你会有
A-B-C
使用C包含更改(使用git更容易讨论提交而不是文件。)现在出现紧急情况,并且您无法使用C代码。结帐B(使用散列或HEAD~1),分支并提交修复:
A-B-C <-Master
-D <-Ticket branch
现在你很好,历史将证明你们不得不拆分一段时间。一旦事情解决,只需合并回来:
A-B-C---E
-D-/
当然,您可以将拉取请求更改为主人,然后是主人
git reset --hard <hash of B commit>
在这张图片中你有:
A-B-C <- Some temp branch
-D <-Master now
提交文件,推送主分支,然后将C /合并/转换为主文件。
===========================
使用第二种方法澄清代码。拉后你有:
A-B-C <-UAT
现在,
git checkout -b tempbranch #to save C
git checkout master
git reset --hard HEAD~1 #Or explicitly B hash
现在树是:
A-B(<-UAT)-C <- tempbranch
制作您的更改并
git commit -a -m"My changes"
树:
A-B-C <-tempbranch
\
D<-UAT
现在你可以推它。如果要包含C,请将其重新绑定或合并。对于一个变种:
git checkout tempbranch
git rebase UAT
git checkout master
git merge tempbranch
git branch -D tempbranch #Not needed!
现在你有:
A-B-D-C
推。