这经常发生在我身上:我写了一些代码,去签入我的更改,然后意识到我不在适当的分支中签入这些更改。然而,我不能切换到另一个分支没有我的更改恢复。是否有一种方法可以将更改移动到另一个分支中进行检查?
当前回答
如果你创建了新的文件,你可以这样做:
git checkout main
git checkout -b branch-b
git checkout branch-a :rel/path/to/yourchangedfiles
git commit -m "w"
git checkout branch-a
git checkout main :rel/path/to/yourchangedfiles
# if this happens:
error: pathspec ':rel/path/to/yourchangedfiles' did not match any file(s) known to git
# then just rm the folder
trash-put rel/path/to/yourchangedfiles
其他回答
软git重置将把提交的更改放回索引中。接下来,签出您打算提交的分支。然后git提交一个新的提交消息。
Git重置——soft <commit> Git checkout <branch> git commit -m“提交信息到这里”
来自git文档:
git reset [<mode>] [<commit>]重置当前分支头 到并可能更新索引(将其重置到树中) 的)和工作树。如果是 省略,默认为——mixed。必须是以下其中之一: 不触及索引文件或工作树(但重置头部,就像所有模式一样)。剩下的 你更改的文件“要提交的更改”,就像git状态所显示的那样 它。
如果您还没有提交您的更改,只需使用git签出移动到新的分支,然后正常提交它们-对文件的更改不会绑定到特定的分支,直到您提交它们。
如果您已经提交了更改:
输入git log并记住要移动的提交文件的SHA。 签出要将提交移动到的分支。 键入git -pick SHA替换上面的SHA。 切换回您原来的分支。 在错误的分支提交之前,使用git reset HEAD~1重置。
Cherry-pick接受一个给定的提交,并将其应用于当前签出的报头,从而允许您将提交复制到一个新的分支。
少管所是你的朋友。
如果你还没有提交,就运行git stash。这将保存您所有的更改。
切换到你想要更改的分支,并运行git stash pop。
git stash有很多用途。这当然是一个更有用的原因。
一个例子:
# work on some code
git stash
git checkout correct-branch
git stash pop
更新:不需要使用stash命令。未提交的更改不属于任何分支,所以只需使用git checkout -b <new-branch>
如果你创建了新的文件,你可以这样做:
git checkout main
git checkout -b branch-b
git checkout branch-a :rel/path/to/yourchangedfiles
git commit -m "w"
git checkout branch-a
git checkout main :rel/path/to/yourchangedfiles
# if this happens:
error: pathspec ':rel/path/to/yourchangedfiles' did not match any file(s) known to git
# then just rm the folder
trash-put rel/path/to/yourchangedfiles
不幸的是,这种情况也经常发生在我身上,如果我在git提交之前意识到自己的错误,我会使用git stash,否则就使用git cherry-pick,这两个命令都在其他答案中解释得很好
我想为git checkout targetBranch添加一个说明:如果targetBranch与当前分支具有相同的历史记录,这个命令只会保留你的工作目录和阶段性快照
如果您还没有提交您的更改,只需使用git签出 转移到新的分支,然后正常提交
@Amber的声明不是假的,当你移动到一个newBranch,git checkout -b newBranch,一个新的指针被创建,它指向与你当前分支完全相同的提交。 事实上,如果你碰巧有另一个分支与你当前的分支共享历史(都指向同一个提交),你可以通过git checkout targetBranch“移动你的更改”
但是,通常不同的分支意味着不同的历史记录,Git不允许您在具有脏工作目录或暂存区域的这些分支之间切换。在这种情况下,你可以执行git checkout -f targetBranch(清除并丢弃更改)或git stage + git checkout targetBranch(清除并保存更改),简单地运行git checkout targetBranch将会给出一个错误:
错误:您对以下文件的本地更改将被覆盖 付款: ... 请在切换分支之前提交您的更改或保存它们。流产
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别