2013-05-16 37 views
0

我有一些麻煩的git(github上),因爲我是新來這個,我的心裏都在想在SVN,我想我只是沒有得到這個......請幫助。搞砸的Git分支,如何解決

所以我工作的一些branch_1做一些修改和提交, 然後做混帳推起源branch_1(並使該分支pull請求) 然後再次做一些修改和提交。

於是我決定切換到其他功能,所以我也 git的結帳-b branch_2

我改變了一些文件,並提交單獨的文件,然後: 混帳推起源branch_2 但當我在branch_2上做出pull請求,它包含了來自branch_2和來自branch_1的一些提交的提交。 最重要的是,我該如何解決這個問題?我的問題基本上是,我做了什麼錯誤(如何正確處理?) 現在呢?我需要對branch_2進行一次最後一次修改,然後對它進行pull請求。

基本上我需要的是在不同的分支機構工作來回切換,做相應的承諾,做拉請求與工作的每個分支只在適當的分支了。

非常感謝!

回答

2

因此,讓我們看看用一個例子發生在這裏。以下是我認爲你做的複製:

$ git init && touch README && git add README && git commit -m 'Initial commit' 
Initialized empty Git repository in /home/peter/ex/.git/ 
[master (root-commit) 56c1728] Initial commit 
0 files changed 
create mode 100644 README 
$ git log --decorate --graph --all --pretty=oneline --abbrev-commit  
* 56c1728 (HEAD, master) Initial commit 
$ git checkout -b branch1 
Switched to a new branch 'branch1' 
$ git log --decorate --graph --all --pretty=oneline --abbrev-commit 
* 56c1728 (HEAD, master, branch1) Initial commit 

git checkout -b <new_branch>將創建一個分支無論HEAD是。看看branch1現在如何指向與HEAD相同的提交。

現在讓我們做一些提交。

$ touch A 
$ git add A 
$ git commit -m 'Add A' 
[branch1 298c3f9] Add A 
0 files changed 
create mode 100644 A 
$ touch B 
$ git add B 
$ git commit -m 'Add B' 
[branch1 24ffff3] Add B 
0 files changed 
create mode 100644 B 
$ git log --decorate --graph --all --pretty=oneline --abbrev-commit 
* 24ffff3 (HEAD, branch1) Add B 
* 298c3f9 Add A 
* 56c1728 (master) Initial commit 

所以,現在,如果我們在HEAD創建一個分支,這是發生了什麼。

$ git checkout -b branch2 
Switched to a new branch 'branch2' 
$ git log --decorate --graph --all --pretty=oneline --abbrev-commit 
* 24ffff3 (HEAD, branch2, branch1) Add B 
* 298c3f9 Add A 
* 56c1728 (master) Initial commit 

這不是你究竟想要做的,但你繼續在branch2工作。

$ touch C 
$ git add C 
$ git commit -m 'Add C' 
[branch2 2cdb51b] Add C 
0 files changed 
create mode 100644 C 
$ touch D 
$ git add D 
$ git commit -m 'Add D' 
[branch2 db7fa2b] Add D 
0 files changed 
create mode 100644 D 
$ git log --decorate --graph --all --pretty=oneline --abbrev-commit 
* db7fa2b (HEAD, branch2) Add D 
* 2cdb51b Add C 
* 24ffff3 (branch1) Add B 
* 298c3f9 Add A 
* 56c1728 (master) Initial commit 

所以現在branch2領先的master 4提交,但你真的只想branch2爲2犯提前掌握(「添加C」和「添加d」)。我們可以用git rebase來解決這個問題。您可以使用git checkout -b <new_branch> <start_point>表格。

$ git checkout -b branch3 master 
Switched to a new branch 'branch3' 
$ git log --decorate --graph --all --pretty=oneline --abbrev-commit 
* c8a299f (branch2) Add D 
* b9325dc Add C 
| * 24ffff3 (branch1) Add B 
| * 298c3f9 Add A 
|/ 
* 56c1728 (HEAD, master, branch3) Initial commit