如果我有 a> b> c 版本。我想回到 b 并添加一些更改所以我现在拥有的是 a>主分支上的b> b + newChanges ,我希望这是有道理的。
答案 0 :(得分:1)
如果您没有将提交推送到遥控器,请尝试以下操作:
命令如下:
git checkout <b commit hash> -b <new branch name>
#make changes
git add .
git commit
git rebase <new branch name> <previous branch name>
如果你已经推动了a&gt; b> c到远程,您不应该更改提交历史记录,只需进行更改并提交。
答案 1 :(得分:1)
在git中,分支基本上只是修订的友好名称 - 请记住,git修订版还包含有关其历史记录的信息。分支优于修订哈希的主要优点是您可以更改分支引用的修订;例如,当您提交一些新代码时,git会更新当前签出的分支以引用您刚刚创建的全新修订。
因此,在您的情况下,您(至少)有三次修订, a , b 和 c 。修订版 a 是 b 的父级,后者又是 c 的父级,主分支引用修订 c 。你需要做的是
确保您已检出主分支。
git checkout master
(可选)如果您想继续访问 c ,则应创建另一个引用 c 的分支。您可以通过运行以下命令来执行此操作:
git branch newbranch
这将创建一个名为 newbranch 的分支,它引用修订版 c 。
重置主分支,使其引用修订 b 。要执行此操作,请选中主,然后运行
git reset --hard HEAD^
符号HEAD^
表示“HEAD
之前的版本”,而HEAD
是当前已检出版本的简写。 (有点像特殊的分支名称。)在您的情况下,HEAD
是 c ,但在运行此命令后,HEAD
将 b 。如果您跳过第2步,则您现在无法访问修订版 c 。 1
进行所需的新更改。
将您的新更改提交到新版本。
git commit -a
提交已经被git或
跟踪的所有已更改文件git add [files]
git commit
显式指定要提交的文件。您现在已经创建了一个新版本 d ,其父级为 b ,其中包含新的更改。
1 好吧,不是真的,但这是高级用法。
答案 2 :(得分:0)
试试这个,
git reset HEAD~1
# make changes
git commit -a --amend
这会将b
和c
的所有更改以及新更改合并到一个新的b
提交中。如果您想要从c
使用reset --hard
。
答案 3 :(得分:0)
我在这里找到了答案 stackoverflow.com/questions/5772192我的所作所为
git reset HEAD~1
git branch -f master temp
git checkout master