GIT:如何从master中删除文件并放入其他分支?

GIT:如何从master中删除文件并放入其他分支?,git,Git,我不小心在master中添加并提交了文件,而不是mybranch分支。现在,即使我切换到mybranch,我也无法通过执行git status来查看它。如何使该文件再次显示以添加/提交和重新加载到mybranch?在主分支中使用git rm dir1/dir2/file。在正确的分支中使用git show master:dir1/dir2/file>dir1/dir2/file和git add dir1/dir2/file 如果在错误提交后更新了主分支,当然不能在git show命令中使用mas

我不小心在
master
中添加并提交了文件,而不是
mybranch
分支。现在,即使我切换到
mybranch
,我也无法通过执行
git status
来查看它。如何使该文件再次显示以添加/提交和重新加载到
mybranch

在主分支中使用
git rm dir1/dir2/file
。在正确的分支中使用
git show master:dir1/dir2/file>dir1/dir2/file
git add dir1/dir2/file

如果在错误提交后更新了主分支,当然不能在
git show
命令中使用
master
,以取回文件。您可以使用
git reflog
查找合适的参考。如果它恰好是
HEAD@{2}
命令将是
git show HEAD@{2}:dir1/dir2/file>dir1/dir2/file


(git会自动识别出它是相同的文件内容,所以您不必担心磁盘空间消耗量翻倍。)

详细答案如下。您可以使用
rebase-on
cherry pick
。至于我-我更喜欢
cherry pick

你可以在你的
mybranch

首先,修复
master
分支

git checkout master
git branch tmp   // This creates a branch in the "wrong" commit
git reset --hard HEAD~1
git checkout tmp
git rebase --onto mybranch master tmp
git checkout mybranch
git merge tmp
git branch -d tmp
master
分支一提交移回。您仍然有一个指向提交的临时分支

现在,将提交移动到
mybranch
分支

git checkout master
git branch tmp   // This creates a branch in the "wrong" commit
git reset --hard HEAD~1
git checkout tmp
git rebase --onto mybranch master tmp
git checkout mybranch
git merge tmp
git branch -d tmp
rebase命令:

  • 起点:--在mybranch上
  • 来自何方:大师
  • 承诺什么:tmp
我建议你打开一些前端看看你在做什么。我使用
gitk

gitk --all &

master
已经被
隐藏了
,所以很清楚。问题是所有的本地更改都被删除了。我不知道你所说的“主机已被隐藏”是什么意思。您编写的错误文件已经提交,因此您可以通过git show将其取回。我添加了更多说明,以防您更新了主分支(例如,要恢复提交或提交文件删除),因为我编写了代码并意外地添加到
master
。现在,我已经创建了一个分支,并通过运行git stash来重置
主机
,从主机上删除文件。更改的文件已经在
mybranch
Git reset和Git stash中,这是不同的命令。在你写的原始问题中,你提交了错误的文件,在最后一条评论中,你只提到添加。同样,这些是不同的命令。你应该编辑你的问题,写出一系列清晰完整的相关命令(例如1.)添加2.)提交。3.)重置4.)签出。。。(不管是什么),然后描述你仍然想要实现的目标。git重置后,带有reflog引用的git show也应适用。git show也可以从隐藏中工作,例如,gitk将显示要使用的引用或sha1。文件是否仅在一次提交中创建和添加?