使用git将提交从主服务器移动到分支上 [英] Move commits from master onto a branch using git

查看:114
本文介绍了使用git将提交从主服务器移动到分支上的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我试图学习如何有效地使用Git,我想知道我应该如何(良好的做法/不好的做法?)解决以下情况:假设我在master中有下面的提交链:


  • 初始提交

  • 提交1 li>
  • 提交2

  • 提交3



然后我意识到在最后两次提交中完成的操作是完全错误的,我需要再次从提交1开始。问题:


  • 我应该怎么做?

  • 我可以将提交2和3移动到单独的分支以保留以备将来参考(说它们毕竟不是那么糟糕),并继续从第一次提交到master?


解决方案

  git branch tmp#用tmp分支标记当前提交
git reset --hard Commit1#还原为Commit1

回答在评论中提到了(关于移动 Commit2 Commit3 到另一个分支):


<




  git 

无意中犯了错误的分支,这让我移动它: checkout correctbranch
git rebase tmp
git branch -d tmp

这里有效因为初始分支已被重置为 Commit1 ,这意味着 git rebase tmp 会在 Commit1 (所以这里 Commit2 Commit3 )添加到新的' correctbranch '。


I'm trying to learn how to use Git effectively and I'm wondering how I should (good practice/bad practice?) solve the following case:

Say I have the following chain of commits in master:

  • Initial commit
  • Commit 1
  • Commit 2
  • Commit 3

Then I realize that what's done in the last two commits is completely wrong and I need to start from Commit 1 again. Questions:

  • How should I do that?
  • Can I move Commit 2 and 3 to a separate branch to keep for future reference (say they weren't that bad after all) and continue working from Commit 1 on master?

解决方案

git branch tmp            # mark the current commit with a tmp branch
git reset --hard Commit1  # revert to Commit1

The SO answer "What's the difference between 'git reset' and 'git checkout' in git?" is quite instructive for that kind of operation

A git reset --hard HEAD~2 would do the same thing (without needing to get back the SHA1 for Commit1 first).

Since Commit2 and Commit3 are still reference by a Git ref (here a branch), you can still revert to them anytime you want (git checkout tmp).


Actually, Darien mentions in the comments (regarding moving Commit2 and Commit3 to another branch):

Accidentally committed to the wrong branch, this let me move it, did:

git checkout correctbranch
git rebase tmp
git branch -d tmp

This works here since the initial branch has been reset to Commit1, which means the git rebase tmp will replay every commit after Commit1 (so here Commit2 and Commit3) to the new 'correctbranch'.

这篇关于使用git将提交从主服务器移动到分支上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆