Gitのブランチを作成し、状態を上流側に戻す元
-
12-09-2019 - |
質問
私は最近、私のGitのレポを台無しにし、それへの救済策があるかどうかを確認したいと思います。
私のセットアップは、この次のとおりです。
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
この方法では、私はいつも私のマスターブランチに中央の手付かずの状態でした。
は、今、私がやったことの代わりにマスターブランチで作業を開始しました。だから私は、私のマスターに変更を加えていない、もはや中央のコピーを取得するためにそれから分岐することができます。私が作ると中央にいくつかの修正をプッシュする必要があるたびに、私は別のディレクトリに中央のクローンを作成し、そこから作業する必要があります。
私の質問は:(フィーチャーを言う)別のブランチに私のマスターに私が行ったすべての変更を動かしながら、中央の同一のコピーであることを私のマスターを「元に戻す」する方法はあります
?私はそれが混乱を知っている、と私は任意の助けをいただければ幸いです。何かが不明である場合、私は明らかにされます。
解決
さてソリューションはパット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
# 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
#
マスターとold_master:今、私は2本の素敵な枝を持っています。マスターは私の中央のコピーされた状態で、生産への修正のために、そして私が以前に行ったすべての作業を保持old_master!
ありがとうございます。
他のヒント
# 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
ブランチ
は、
により、正確に何を意味するのか私は[アップ]私のマスターとそれからすることができなくなった枝をめちゃめちゃます。
あなたは、常にいずれかから新しいブランチを作成することができますに関係なく、それは、そのことによってGitがの概念を持っていない何かである「めちゃくちゃ」か、リポジトリにコミットしていない。
Gitは明示的に任意のオブジェクトを削除しませんので、あなたはそれが以前に持っていたどのような状態にリポジトリを元に戻すことができます。基本的には、それだけでゴミ(ダングリング)参照されない収集するすべての今してオブジェクト。だから、あなたは自分のリポジトリがどのように見えるかを知る必要があります。 gitk
またはgit log
があなたを助けることができます。
あなたは単にあなたの中央の公開リポジトリにそれを押し戻すことができます。それは非早送りプッシュにつながる場合は、押したときに--force
フラグを指定する必要があります。