我该如何将我的工作和更改从 master
分支移动到一个新创建的分支,并在移动后保持 master 分支不变?
git stash
然后检出该分支
git checkout -b newbranchname
把更改放在这里
git stash pop
git checkout -b newbranch
git checkout master
git reset --hard head^1
附注:只有在没有创建新文件,仅修改现有文件的情况下才有效。
git branch branchname
命令创建一个新的分支,该分支将指向当前提交(commit)(如果想要直接检出,则可以使用 git checkout -b branchname
)。这将基本上复制你的主分支(master branch),因此你可以在那里继续工作。git reset --hard commit
命令将 master 分支重置为其原始点,其中commit
是主分支上应该是最后一个提交的哈希值(hash)。---- 1 ---- 2 ---- 3 ---- 4 ---- 5 ---- 6
^ ^
original master
master commit
你已经检出了提交为 6
的 master
分支,并想要创建一个新的名为 ticket
的分支,指向那个 6
,同时将 master
重置为 3
:
所以您已经检出 master 分支上的提交 6 并且想要创建一个新的名为 ticket 的分支,该分支指向提交 6,同时将主分支 master 重置为提交 3。
git branch ticket
git reset --hard 3
git checkout ticket
那么现在你正在 ticket
分支,指向提交的版本号是 6
,而主分支 master
指向版本号为 3
的提交。
git checkout
中的 -b
告诉 Git 在检出分支之前创建该分支。它基本上是 git branch name
和 git checkout name
的快捷方式;当您想要开始在新分支上工作时,通常会使用它。 - pokegit stash
将工作保存到其他地方。 - pokegit branch work_branch
git reset --hard HEAD~2
将数字2替换为您想要返回的提交数。此时,您仍在主分支上,如果您想要切换到分支以继续工作,只需git checkout work_branch
如果您想了解如何使用类似HEAD~2
的引用遍历回退您的提交树的语法,请参见git rev-parse --help
git reset --hard HEAD~2
< p > (回退到HEAD
之前的两个commits
,因为我这里有两个有问题的commits
。所以对于你的情况可能会不同)
现在我的master_infected
分支包含了我想要保留的代码(如我所说的污染代码),而master
分支现在处于安全模式。
git add --all
git commit -m <commit-message>
git branch -m master <feature-branch-name>
git push --set-upstream origin <feature-branch-name>