我的項目在服務器上有一個裸回購安裝。我目前在分支0.9/develop
。我合併了0.9/develop
與另一個開發人員正在開發的分支。事實證明,這將是方式更多的工作來解決他的代碼,而不是完全消除他的變化。不幸的是,在合併之後我已經運行了git push origin 0.9/develop
,並且將這些更改提交給我的開發和臨時服務器(是的,我很笨)。我的git回購有多嚴重?
我一直在經歷一系列類似的問題,但沒有一個似乎涵蓋了我的確切案例。這一個是特別有用的:How to revert Git repository to a previous commit?
使用從這個問題的信息,我能夠成功地抹殺最後一次提交的項目。具體來說,我做了一個git reset --hard f6c84a0
,在我將其他開發者的n00bery合併到我的詩歌之前,它成功地將我的本地存儲庫重置爲提交權。
好的,太好了。現在我只需要修復光禿禿的回購。所以我試了git push --force origin 0.9/develop
。不幸的是,我丟失了服務器發送回來的特定消息,但這是沿着「成功」的方向,並且它表明遠程repo已更新爲提交f6c84a0。
當我試圖ssh到服務器,然後去我登臺環境和運行git pull
,反應是:
From /home/ben/web/example
+ 77d54e4...f6c84a0 0.9/develop -> origin/0.9/develop (forced update)
Already up-to-date.
然而,當我從臨時服務器跑了git log
,所有的合併提交仍在0.9/develop
分支上。我嘗試了一些東西,比如git pull --force
,但是我不能讓糟糕的承諾消失。
好,很好。有不止一種方法來剝皮貓。我清理了臨時服務器,並做了一個新的git clone --recursive --no-hardlinks example.git stage.example.com
,並運行了一些必要的安裝腳本來完成一些小的服務器維護工作。
現在我不能回到我的0.9/develop branch
。在過去,我只是跑git checkout 0.9/develop
,但如果我現在就試試,我得到這樣的:
Branch 0.9/develop set up to track remote branch 0.9/develop from origin.
Switched to a new branch '0.9/develop'
等待......什麼? 0.9/develop
不是一個新的分支。從這個問題與信息工作:How to clone all remote branches in Git?我做了git branch -a
,得到了以下幾點:
* 0.9/develop
master
remotes/origin/0.8/develop
remotes/origin/0.8/master
remotes/origin/0.9/develop
remotes/origin/HEAD -> origin/master
remotes/origin/category-address
remotes/origin/jaminimaj
remotes/origin/master
remotes/origin/permissions
remotes/origin/ticket-duration
remotes/origin/timzone-support
我又試圖git checkout origin/0.9/develop
,但我得到了以下信息:
Note: checking out 'origin/0.9/develop'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b new_branch_name
HEAD is now at f6c84a0... bugfix: revert email helper
好了,好消息是臨時服務器現在有適當的代碼庫,但我處於分離的HEAD狀態。我意識到,我可能在這裏錯過了一些非常不重要的事情,但它肯定會讓我的週五晚上變得糟糕。我怎樣才能讓我的臨時服務器HEAD指向0.9/develop
的HEAD?另外,我想在我的開發環境中做同樣的事情,但我寧願以適當的方式執行,而不是擦除整個服務器並重新開始。我可以這麼做嗎,還是隻能通過從repo重建服務器來暴力破解?感謝大家的幫助!
這不是一個錯誤......它是你想要的......它是一個新的本地分支......只是基於遠程分支:「分支0.9 /開發設置爲跟蹤遠程分支0.9 /開發從原產地。 切換到一個新的分支'0.9/develop'' –
你問關於[改變光禿禿的回購活動分支](http://stackoverflow.com/questions/3301956/git-correct-way-to-change-主動分支在-A-裸庫)? –
@MattCooper它可能不是一個錯誤,但它不是我想要的。我不想要一個新的本地分支。我想要裸回購的'0.9/develop'分支。 –