摘要:我忘了在开发时切换分支,并希望将文件/更改移动到相应的分支。
详细信息:我有两个文件A
和B
,最初位于master
。然后,我创建了一个分支branch1
,以便在文件A
中进行一些重大更改。
在开发这些更改时,我还修改了B
并创建了一个文件C
。问题是我现在意识到我在分支方面犯了一个错误
B
应该在自己的branch2
中(不存在),C
属于master
。 现在所有这些都已在branch1
中提交。
提交被推送到远程存储库但是没那么重要,我可以让其他开发人员克隆repo(而不是fetch)。
在这种情况下恢复的一般方法是什么,即。在分支机构之间移动文件或更改?
答案 0 :(得分:2)
一个简单的解决方案就是branch1
:
git checkout -b branch2
),然后移除C
。添加,提交和推送C
from branch1
(git show branch1:path/to/C >path/to/C
)。添加,提交和推送。branch1
,删除额外的文件,添加,提交和推送。这样,没有合并,没有历史重写,甚至没有恢复,只是一些额外的提交推送到远程清理当前的情况。
答案 1 :(得分:0)
我想您将要使用以下命令查看git日志:
sudo git log
然后,您将需要签出/恢复先前提交的哈希值,该提交已在您编辑文件但未编译其他文件的位置完成,这是您在branch2中所需的内容。要签出/恢复旧提交,请使用以下命令:
sudo git revert THELONGNUMERICHASHCODEGOESHERE
E,G。 sudo git revert 102b78f76dcf2302345570b4f738b28700266f87
在签出了您想要的提交后,您可以使用以下命令将分支分支到所需的新分支:
sudo git checkout -b branch2
转到文件C,这个可能很棘手但你可以尝试:
sudo git checkout master
sudo git checkout master-2
branch1
合并到master-2
。在master-2
运行时sudo git merge branch1
sudo git checkout branch1
B
sudo git log
查找上一次提交
sudo git checkout branch-fileb
branch-fileb
上,使用sudo git merge branch1
branch-fileb
sudo git merge master
上进行准备
master
,然后使用以下代码branch-fileb
合并sudo git merge branch-fileb
分支应该都是你现在想要的。
对于良好的内务删除和本地未使用的分支和任何未使用的远程分支。
答案 2 :(得分:0)
git cherry-pick <SHA1_hash>
git diff <starting_commit_hash> <ending_commit_hash> > changes.patch
git checkout <branch>
git apply --check changes.patch
git apply -p1 < changes.patch
rm changes.patch
git diff <starting_SHA1_hash> <ending_SHA1_hash> -- path/file > changes.patch
git diff --full-index --binary <starting_SHA1_hash> <ending_SHA1_hash> > changes.patch
git reset --hard <SHA1_hash> or git branch -D <branch>
答案 3 :(得分:0)
当我遇到这种情况时,我通常会使用存储来移动分支周围的变化。假设你没有做任何事情:
git stash
,或git stash save 'useful message to remember what I was doing'
保存更改git checkout -b branch2
git stash apply
将您的更改应用于B git checkout master
C
,除非有另一个名为C
的文件,否则在执行这些命令时该文件不应更改或移动。既然你已经提交了所有内容,我只是建议你撤消它;除非你与别人分享你的工作,否则这不应该成为问题。
git reset HEAD^
应该执行此操作,将文件留给您,好像他们没有被提交到分支机构一样。您现在可以执行上述操作。
如果您已经与世界其他地方分享了您的工作,我不会改变历史记录,除非您可以协调所有人来检索您的更改。