当前位置:  开发笔记 > 编程语言 > 正文

创建git分支,并将原始状态恢复为上游状态

如何解决《创建git分支,并将原始状态恢复为上游状态》经验,为你挑选了2个好方法。

我最近搞砸了我的git repo,想知道是否有任何补救措施.

我的设置是这样的:

Central repo on github.
Personal repo on github (which is a fork of Central)
   +Central is setup as remote (upstream/master)
   +Master branch (origin/master)
   +Feature branch (origin/feature)

我的工作流程是这样的:

Need to fix something in Central:
   1. checkout Master
   2. Make changes
   3. Pull from upstream/master and merge
   3. Commit, push to upstream/master

Need to work on a New Feature:
   1. Checkout/Create Feature branch
   2. Work work work
   3. Pull from upstream/master and merge
   4. Commit, push to upstream/master

这样我在我的主人分支中总是有一个原始的中央状态.

现在我所做的就是开始在Master分支上工作.所以我对我的主人进行了更改,并且不再从中分支以获得Central的副本.每当我需要制作并推送一些修复到Central时,我必须将Central克隆到另一个目录并从那里开始工作.

我的问题:有没有办法将我的主人"恢复"为中央的相同副本,同时将我在主人身上所做的所有更改移到另一个分支(比如功能)?

我知道这很令人困惑,我很感激任何帮助.我会澄清是否有任何不清楚的地方.



1> Andriy Drozd..:

Pat Notz和Bombe暗示,解决方案非常简单.

#Make sure we're on the master branch
$ git checkout master

# Make a new branch to hold the work I've done
$ git branch old_master
# Save this branch on my remote repo (for backup)
$ git checkout old_master
$ git push origin old_master

# Reset my local master back to match the commit just before I started 
# working on my new feature
$ git checkout master
$ git reset --hard 2aa93842342342
# Get it to be the same as my Central
$ git pull upstream master

# Now DELETE my master on my remote repo
$ git push origin :master
# And recreate it
$ git push origin master

# Branch created!
#* [new branch]      master -> master

#

现在我有两个很好的分支:master和old_master.master是我的Central的副本,用于修复生产,old_master持有我之前做过的所有工作!

谢谢!


我认为不是你的第4个命令,"git push old_master origin old_master",你应该有"git push origin old_master"?我希望这是对的,因为这似乎对我有用.否则我收到一条错误消息:"致命:'old_master'似乎不是git存储库"
我不能"git push origin:master".这篇文章解释了解决这个问题的方法.http://matthew-brett.github.com/pydagogue/gh_delete_master.html关键是,确保master不是github上的默认分支.如果您正在处理分叉回购,这是一个很好的政策.

2> Pat Notz..:
# Make sure we're on the master branch
$ git checkout master

# Make a new branch to hold the work I've done
$ git branch old_master

# Reset my local master back to match origin/master
$ git reset --hard origin/master

现在,您可以检出old_master并使用它,就像你做你的feature分支

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有