我一直在用git工作一个多月.事实上我昨天才第一次使用复位,但软复位对我来说仍然没有多大意义.
据我所知,我可以使用软重置编辑提交而不改变索引或工作目录git commit --amend.
这两个命令是否真的相同(reset --softvs commit --amend)?有任何理由在实际中使用其中一个吗?更重要的是,reset --soft除了修改提交之外还有其他用途吗?
是否可以使用git中的所有子分支来重新分支一个分支?
我经常使用分支作为快速/可变标记来标记某些提交.
* master
*
* featureA-finished
*
* origin/master
Run Code Online (Sandbox Code Playgroud)
现在我想rebase -i master进入origin/master,改变/重新提交提交featureA-finished^
之后git rebase -i --onto origin/master origin/master master,我基本上希望历史是:
* master
*
* featureA-finished
* (changed/reworded)
* origin/master
Run Code Online (Sandbox Code Playgroud)
但我得到的是:
* master
*
* (same changeset as featureA-finished)
* (changed/reworded)
| * featureA-finished
|.* (original commit i wanted to edit)
* origin/master
Run Code Online (Sandbox Code Playgroud)
有没有办法绕过它,还是我坚持在新的重新提交的作品上重新创建分支?
有时我想做一个变基,并确保其他引用更新到新结构,而无需手动重置或多次变基。
有没有一种方法可以一次性完成,以便 git rebase 可以将引用更新为在 rebase 之前选择并具有引用的新提交?
一个例子:
Rebase前的情况:
* abc3... commit3 (branch:a, HEAD)
* abc2... commit2
* abc1... commit1 (branch:b)
* abc0... base commmit (branch:master)
Run Code Online (Sandbox Code Playgroud)
然后执行 Rebase master -i: pick abc3, abc1, abc2
结果将如下所示:(branch:b 保留在自己的提交分支中)
* abc6... commit2 (branch:a, HEAD)
* abc5... commit1
* abc4... commit3
|
| * abc1... commit1 (branch:b)
|/
* abc0... base commmit (branch:master)
Run Code Online (Sandbox Code Playgroud)
我希望结果看起来像:(分支:b 更新为新提交)
* abc6... commit2 (branch:a, HEAD)
* abc5... commit1 (branch:b)
* abc4... commit3
* abc0... base commmit (branch:master)
Run Code Online (Sandbox Code Playgroud)