Git:从主分支移动更改

Mel*_*emi 29 git master git-branch

基本问题,但这一直发生在我身上:

  • 在a中进行更改 working-branch
  • 切换到 master
  • git merge working-branch
  • git push
  • cap deploy(到分期)
  • 泡一杯新茶

然后我回过头来想想别的东西,然后开始做一些改变......同时还要掌握.

什么是简单的方法:

  1. 防止对master进行直接编辑(也许警告)
  2. 将所有编辑内容移动到working-branch并清除,master以便我可以继续编辑working-branch
  3. 将编辑旋转到一个全新的分支new-working-branch然后丢弃working-branch

本页 "分支"部分的后半部分冒了一个风险并尝试了推荐,但这只是消除了我的所有编辑!?!也许是因为后git branch dubious-experimentgit checkout mastergit status上两个分支是相同的(主上不"干净").所以git reset --hard <SHA1sum>两者的所有变化都消失了!?!

  git branch dubious-experiment

  M---N-----O----P---Q ("master" and "dubious-experiment")

  git checkout master

  # Be careful with this next command: make sure "git status" is
  # clean, you're definitely on "master" and the
  # "dubious-experiment" branch has the commits you were working
  # on first...

  git reset --hard <SHA1sum of commit N>
Run Code Online (Sandbox Code Playgroud)

Chr*_*ial 31

根据您的描述,我假设您尚未提交任何更改 - 这是正确的吗?

如果是的话,这是你的答案:

如何防止直接编辑掌握

您需要在编辑器中设置它,但这可能很难.在提示符和编辑器中显示当前分支有很大帮助.

如何将更改移动到新分支new-working-branch然后丢弃working-branch

git checkout -b new-working-branch
git add …
git commit -m "mycommit" 
Run Code Online (Sandbox Code Playgroud)

由于你还没有提交任何东西,你不需要在master上做任何改变.如果您愿意,现在可以丢弃您的工作分支.

如何将更改移动到 working-branch

git checkout -b temp-branch
git add …
git commit -m "mycommit" 
git rebase --onto working-branch master
git checkout working-branch
git reset --hard temp-branch
git branch -d temp-branch
Run Code Online (Sandbox Code Playgroud)

如果您的更改不与master上的任何更改冲突,但不会与工作分支中的更改冲突,则可以更简单地完成此操作:

git stash
git checkout working-branch
git stash pop
Run Code Online (Sandbox Code Playgroud)


Kur*_*tal 7

如果你已经提交了你的更改master但没有推到任何地方......

为最后的更改创建一个新分支

git checkout -b newfeat master
Run Code Online (Sandbox Code Playgroud)

重播所有更改(移动提交)在您的working-branch分支上

git rebase --onto working-branch origin/master newfeat
Run Code Online (Sandbox Code Playgroud)

更改为master分支并将其重置为上次推送的状态

git checkout master
git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)

此时你有:

  • master指向上次推送的提交(origin/master)
  • working-branch 从未改变过
  • 一个newfeat包含所有新提交的新分支,并且领先于working-branch.