我不知道你做了什么,或者认为你做了什么,但origin/orgs_phase_2 是一个远程跟踪分支。它的唯一目的是指出上次与后者通信时名为orgs_phase_2 的分支引用在名为origin 的远程仓库中指向的位置。这种引用可以移动的唯一方法是通过获取或推送。特别是,您不能对远程跟踪分支进行变基。
此外,Pro Git 的书是正确的。 你把git-rebase的语法倒过来了。 Git 的rebase 就像那本书中所宣传的那样工作,
git rebase [basebranch] [topicbranch]
为您检查主题分支 [...] 并将其重播到基本分支 [...]
在git-rebase 手册页中,
假设存在以下历史且当前分支为“topic”:
A---B---C topic
/
D---E---F---G master
从此时开始,以下任一命令的结果:
git rebase master
git rebase master topic
应该是:
A'--B'--C' topic
/
D---E---F---G master
为了修正想法,这里有一个小例子,你可以在家里复制:
#!/bin/bash
# set things up
cd ~/Desktop
mkdir test
cd test
git init
# write an initial shopping list
printf "4 pears\n" > shopping.txt
printf "3 lemons\n" >> shopping.txt
printf "1 stalk of celery\n" >> shopping.txt
printf "4 bananas\n" >> shopping.txt
# make a first commit on master
git add shopping.txt
git commit -m "add shopping list"
# modify the shopping list and make a second commit on master
sed -i '' 's/4 pears/4 apples/' shopping.txt
git add shopping.txt
git commit -m "replace pears by apples"
# create and check out a new branch called "kidscominghome"
git checkout -b kidscominghome
# make two more commits on kidscominghome
printf "16 pots of yoghurt\n" >> shopping.txt
git add shopping.txt
git commit -m "add yoghurt"
printf "beer\n" >> shopping.txt
git add shopping.txt
git commit -m "add beer"
# check out master, modify the file, and make one more commit
git checkout master
sed -i '' 's/stalk of celery/cauliflower/' shopping.txt
git add shopping.txt
git commit -m "replace celery by cauliflower"
在这个阶段,输出
git log --graph --decorate --oneline --all
应该是
* 5a0e340 (HEAD, master) replace celery by cauliflower
| * d3d22d0 (kidscominghome) add beer
| * edd730d add yoghurt
|/
* 7dc55b7 replace pears by apples
* 7079948 add shopping list
这是一个更漂亮的图表,显示了相同的历史:
现在,如果你运行
git rebase master kidscominghome
然后运行同样的git log 命令,你应该会看到
* 2acf37d (HEAD, kidscominghome) add beer
* dfac4a8 add yoghurt
* 5a0e340 (master) replace celery by cauliflower
* 7dc55b7 replace pears by apples
* 7079948 add shopping list
再一次,这是一个更漂亮的图表,显示了相同的历史:
正如宣传的那样,kidscominghome 分支已被签出,只能从kidcominghome 访问的提交已在master 之上重放;不是相反!