2013-05-28 85 views
2

我們已經實現了一種混帳流的工作流程,在我們公司,但不是每個人都實際使用Git流又那麼有一些打嗝恢復合併後不能合併的主人。這是一個。有在git的特性分支,並從不同的分支

一位同事正在研究一個功能分支,並需要一些目前掌握和開發的錯誤修復。然而,他感到困惑和融合發展到他的功能分支,而不是主人,從而得到一些不需要的功能。他推到我們的git服務器。

現在,我看到他的錯誤,我們試圖糾正它。我們恢復了合併提交

git revert -m 1 hismergecommit 

並且解散了他的合併。但是,如果他試圖將主人合併到他的分支中,他會被告知沒有任何東西可以合併!這似乎是由於這個事實,即師父之前曾被合併到開發中。

enter image description here

的畫面給人一個想法是什麼樣子。

有沒有辦法在大師給他的功能合併,而不正在重置他的特性分支之前他的壞合併或採摘櫻桃的所有提交的高手?

編輯:

我想補充一點,雖然他推動了分支服務器,別人沒把它,所以它不是「危」爲改寫歷史在這種情況下,我d只是想知道是否有一種很好的方法來解決這些問題。

回答

1

重置分支有什麼問題?

我複製了這個問題是這樣的:

git init . 

echo line > file 
git add file 
git commit . -m "added file" 

# Create the branches 
git branch -t feature 
git branch -t dev 

git checkout dev 
echo dev-line >> file 
git commit . -m "added dev-line" 
echo test > another-file 
git add another-file 
git commit . -m "another file" 
git merge master 

git checkout feature 
echo test > feature-file 
git add feature-file 
git commit . -m "feature commit" 

# merge dev into the feature branch 
git merge dev 

# undo the merge 
git revert -m 1 e04d9159fa54aaf06e7329a7799cc58fc3334d34 


# Now we have this mess: 
* add2b8ea6583c355cc49048b65f07ce697d9c01c Revert "Merge branch 'dev' into feature" 
* e04d9159fa54aaf06e7329a7799cc58fc3334d34 Merge branch 'dev' into feature 
|\ 
| * b506d08d62b6434e1383d50eccc26d5a933703e2 Merge branch 'master' into dev 
| |\ 
| | * 18671754b703561587c3875d0f56bd99a2e08c74 another file 
| * | 978c2f52d1cd10fc27af2f0a59f295d99ac20e28 added dev-line 
| |/ 
* | ac794379e0a2038822ca772ffb3098b5270f22c2 feature commit 
|/ 
* d416cf0e4a84517871e93e0ac13a60c586353a79 added file 

# Now when we try to merge master we get 'Already up-to-date.' This is because master was already merged. 
git merge master 

IMO最徹底的方法,是在提交之前的特性分支復位。

git reset --hard ac794379e0a2038822ca772ffb3098b5270f22c2 
git merge master 

* 4fa1459304668ec7b8d61eed052f9161fce02435 Merge branch 'master' into feature 
|\ 
| * 18671754b703561587c3875d0f56bd99a2e08c74 another file 
* | ac794379e0a2038822ca772ffb3098b5270f22c2 feature commit 
|/ 
* d416cf0e4a84517871e93e0ac13a60c586353a79 added file 

然後強制推送到服務器。

+0

服務器不幸的是可以防止強制推送。但是,我們可以要求管理員刪除服務器上的分支,然後我們可以在本地重置。 – Boumbles

+0

您可以通過按(無需強制)來刪除遠程分支。 'git push origin:feature'刪除原點上的'feature'(本地分支保持不變)。然後你可以再次推分支;-) – siebz0r

+0

不幸的是,我們的服務器被配置爲不允許任何重寫歷史記錄。如果你已經這麼做了,你甚至不能修改一個提交,然後嘗試推送。 – Boumbles

1

讓我們在合併之前調用c1提交。您可以嘗試將特徵分支重置爲c1,然後將主體合併到特徵分支中並推送結果。

git reset --hard c1 
git merge master 
git commit -am "some stuff" 
git pull origin feature_branch 
git push origin feature_branch