2015-10-14 130 views
4

我希望我能更好地瞭解git。如何從本地和遠程的git repo上刪除文件

我的回購中有一些項目設置文件,每次我們提交項目時都會與同事發生衝突。不完全確定原因,但是由於它們產生的噪音,這些文件是從回購庫中刪除的。我無法得到這個工作來拯救我的生命。

開始之前,我確保我的分支與遙控器完全同步。然後,我用

git filter-branch -f --index-filter \ 'git rm -r --cached --ignore-unmatch *.csproj' HEAD 

我加入了-f標誌,由於一些問題與備份,因爲我現在已經運行此一對夫婦倍。

運行此命令似乎刪除我的回購中的所有文件。但是,當我嘗試將此更改推送到服務器時,它給出了一個錯誤,說我的回購是在遠程版本後面提交2次。它建議我拉,然後撤消上面的命令。

我錯過了什麼改變到我的服務器? (Bitbucket)

回答

2

如果我正確理解您的問題,則無法推送到遠程存儲庫,因爲您的本地歷史記錄與遠程歷史記錄不匹配。這通常發生在您使用rebasefilter branch更改本地命中提交時。

如果您將本地更改推送到遠程,您將重寫項目的部分或全部歷史記錄。這意味着您的項目中的每個開發人員在嘗試git pull時都會遇到碰撞,因爲現在的他們的本地歷史與遠程的歷史記錄不同。在這樣的情況下,你通常希望向你的合作開發者發送消息,因爲如果他們不知道你做了什麼,這可能會令人困惑和費時。

話雖如此,我相信你正在尋找--force選項git push。您想要運行git push --force origin master。正如其名稱所暗示的那樣,將使用本地git歷史覆蓋遠程設備中的任何內容。

請您在閱讀本文之前閱讀the docs,如果您有任何問題,請提出更多問題,因爲這是潛在的破壞性事情。

編輯: 你的同事有兩個我知道的選擇。他們可以選擇fetch/reset路線或rebase路線。

fetch/reset路由需要將您的同事的本地存儲庫重置爲與遠程存儲庫完全相同。這是可以做到的:

git fetch origin && git checkout master 
git reset --hard origin/master 

rebase航線需要在新清潔大師的頂級應用您的同事的本地提交。在交互模式下,他們將有機會在包含它之前檢查每個提交。如果提交包含你想要的文件,他們可以簡單地忽略它。這可以用

混帳做取 git的變基-i origin/master的

如果你們雙方同意你的倉庫應該是因爲它的速度更快規範的一個第一種選擇將是可取的。第二種方法反過來給你更細粒度的控制。

您可以檢查出這太問題剷球力推更徹底拉後的問題:git pull after forced update

+0

所以,我告訴我的同事把他的版本是最新的用遙控器。然後我用這個--force選項覆蓋遠程。然後他做了一個git pull來更新他的版本? – gdbj

+0

我添加了一些文件到我的.gitignore文件,並試圖讓他們離開這個回購。它證明是複雜的。 – gdbj

相關問題