0

我在使用 git (github) 时遇到了一些麻烦,因为我是新手,我的脑子里正在考虑 SVN,我想我只是没有得到这个......请帮忙。

因此,我正在对一些 branch_1 进行一些更改和提交,然后执行 git push origin branch_1 (并在该分支上发出拉取请求),然后再次进行一些更改和提交。

然后我决定切换到其他功能,所以我做了 git checkout -b branch_2

我更改了一些文件,提交了那个单独的文件,然后: git push origin branch_2 但是当我尝试在 branch_2 上发出拉取请求时,它包含来自 branch_2 的提交和来自 branch_1 的一些提交

我的问题基本上是,我做错了什么(这通常是如何正确处理的?)最重要的是我现在该如何解决这个问题?我只需要一次提交我对它所做的最后更改的分支_2,并使用该一次提交对其进行拉取请求。

基本上我需要的是在不同的分支上来回切换,相应地进行提交并对每个分支进行拉取请求,只在适当的分支上完成工作。

非常感谢!

4

1 回答 1

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比 master 提前 2 次提交('Add C' 和 'Add D')。我们可以用git rebase.

$ git rebase --onto master branch1 branch2
First, rewinding head to replay your work on top of it...
Applying: Add C
Applying: Add D
$ git log --decorate --graph --all --pretty=oneline --abbrev-commit
* c8a299f (HEAD, branch2) Add D
* b9325dc Add C
| * 24ffff3 (branch1) Add B
| * 298c3f9 Add A
|/  
* 56c1728 (master) Initial commit

下次创建分支时,您可以使用该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
于 2013-05-16T17:11:10.100 回答