2015-09-21 65 views
4

我不經常使用git或linux命令行,看起來我把它弄得一團糟。我是一個Windows用戶,我使用cygwin來模擬該環境。如何將git存儲庫一次性重置爲乾淨的狀態

現狀:

我有多個倉庫跟蹤,一個,我的工作和只有我讀了幾人。

有時候,當我長時間不從他們那裏拉(一個人超過2k就在我面前提交)時,有時git status告訴我,分支已經分歧。我不知道這是怎麼發生的,但是我現在是2K落後和1領先。由於某些文件導致衝突,拉動然後失敗,無法解決。

這給我留下了問題,我現在有一個存儲庫,我不能再從中拉出來,因爲它有衝突。

所以我的問題是:我怎樣纔能有效地從存儲庫中拉出而不會發生衝突?我不在乎任何改變。

這是解決我每次打亂了時間做:

git log --max-parents=0 head # copy ID on bottom 
git reset --hard <ID-you-have-copied> 
git clean -f -d 
git pull 

這是愚蠢的,我喜歡有一個命令。我知道git別名,但我不知道如何從命令1將命令ID提交到命令2.我也可以將shell腳本放在某處,這對我來說是這樣,但它應該是動態的,沒有硬編碼的ID。

它看起來像我有分支重置只是落後故障不存在提交,然後我可以再次轉發

有沒有辦法,我失去了一些東西明顯?

+0

'git --max-parents = 0 head#copy底部'是什麼?這應該做什麼? – Zloj

+0

@Zloj對不起,我感到困惑。我現在已經解決了這個問題中的命令,但我不再需要這樣做,因爲答案已經提出,似乎有效。 – AyrA

+0

感謝您的澄清。很高興你的問題解決了。 – Zloj

回答

1

我不確定git --max-parents=0 head命令是什麼。

但我猜你可以簡單地做到這一點,而不是(產地&主可與所需的遠程和分支名稱進行替換):

git fetch origin master 
git reset --hard FETCH_HEAD 
git clean -f -d 

這將重置當前分支指針和工作樹到最新獲取的承諾(和以與您的命令相同的方式刪除未跟蹤的文件)。

注意:這將刪除存儲庫中的所有本地更改,包括已提交和未提交的更改。 (雖然承諾的更改仍然可以通過參考git reflog來恢復)

+0

這似乎現在工作。我已經修復了問題中可疑的命令。它應該是'git log --max-parents = 0 head',但我不再需要這個解決方案。 – AyrA

0

刪除您簽出的分支並檢查出來,這將繞過所有合併。

0

我會做@Alderath所指示的,但不一定會立即重置您的HEAD。只要做git fetch origin master(或者你的分支是爲了獲得新的提交)。 Git fetch只是從原點檢索提交,而git pull則檢索併合並,這可能比你想要咬的更多(正如你發現的那樣)。然後找出與「git log master ... origin/master」或git diff相同的區別。現在弄清楚你想對這些差異做些什麼。您可以嘗試在原產地/主產品上重新組合或合併您的工作,或者只是在原產地/主產品上重新開始您的更改,如果分歧太大以致無法合併/重新分配,則可以輕鬆完成。

相關問題