2015-12-08 85 views
0

我對Git有點麻煩。Git Pull覆蓋本地更改

這裏是前言:前幾天我做了幾次提交,並將其推到GitHub的遙控器。事實證明,這些功能中的一些與另一個開發人員的功能有所幹擾。因此,她恢復了我的3-4次提交,以便測試她的功能。

現在的故事。今天,我在本地做了一些更改和提交。當我去推他們時,我被告知遠程是不同的,我需要使用合併工具。我做了(這些變化是微不足道的)。然後,我做了一個合併提交。這個提交的問題是它完全覆蓋了我所做的本地更改。在另一個線索詢問後,我用git reset --hard <commit number>回到我的工作代碼。從現在開始,不管我嘗試做什麼,我都不斷讓我的代碼被遠程版本覆蓋。

爲什麼這樣的情況發生,我該如何解決呢?我基本上想確保我的本地是最新的遠程,我可以將我的更改推送到遠程。

編輯:

我做git reset --hard,並嘗試做git push origin <commit number>:<remote branch name>後,我收到以下錯誤:

error: failed to push some refs to

' https://github.com/xxx/xxx.git ' hint: Updates were

rejected because the tip of your current branch is behind hint: its

remote counterpart. Integrate the remote changes (e.g. hint: 'git pull

...') before pushing again. hint: See the 'Note about fast-forwards'

in 'git push --help' for details.

回答

2

出現這種情況,正是因爲當地的「主」(讓我們說這是主)分支不等於或比遠程「主」更先進。

你遇到軟件「叉」的根本基礎。你只是試圖將一個完全不同的故事推送到遠程倉庫,與你的同事相矛盾。 Git不喜歡這種行爲,通常阻止你這樣做。

你和你的同事真的需要坐下來談談的是哪個版本的「起點+更改」之間最好VS自己的「起點+的變化」。

也許你需要手動合併。

不管最後的結果應該是,那是你的團隊來決定。

Hence, she reverted 3-4 of my commits so she could test her feature.

哎喲 - 她應該爲這些麻煩找點責任。她應該使用獨立的分支/分叉來測試她的功能。

它花時間來學習的概念「分支,提取,合併,推動」正確是很重要的。使用練習庫進行試驗並使用git。此外,還有很多「學習使用git」的在線課件可以使用;許多是互動的。相關的,學習一些git工作流程:https://www.atlassian.com/git/tutorials/comparing-workflows

一種選擇是「強制」推送到遠程服務器,假設它是一個友好的推送服務器。 (Force "git push" to overwrite remote files

# -- CAUTION -- 

# > With great power comes great responsibility. 

# -- CAUTION -- 

git push <remote> <branch> -f 
git push origin master -f # Example 

git push <remote> -f 
git push origin -f # Example 

git push -f 

git push <remote> <branch> --force-with-lease 

你的同事可能會不喜歡,爲未經協商發生,就像你不喜歡就返回怎麼造成你的問題。再次請告訴您的同事在這種情況下一起決定最佳行動方案。

+0

非常感謝您提供非常詳盡的答案。她的迴歸更多的是確保「可疑」,也許不是完全有效的功能不會繼續部署。(我意識到工作流聽起來很愚蠢,但它是一個小項目,我剛加入它)。我懷疑迴歸與這些災難有關。強制推送的缺點是什麼?完全可能會發生與該分支有關的錯誤嗎? – ArtforLife

+0

啊。聽起來像是一個合法的回覆。那麼,在這種情況下,這聽起來像你的「可疑的,可能不工作的代碼」應該在一個新的分支。這就是git中分支的全部要點。執行其他任何操作,然後執行'git branch my_feature_branch',並用'git push origin my_feature_branch'(假設原點是正確的名稱)推送出同級審查,然後'git reset --hard [commit_id]'放棄你大概錯誤的/實驗性的'master'提升。如果你想追求那個分支的話題,可以用'git checkout my_feature_branch'繼續。 – starlocke

+0

我想我明白了。假設我像你說的那樣推出那個分支。如果遙控器之前沒有它,它將被創建,並且我的所有提交歷史記錄都將被髮送到遠程,是否正確?另外,當我的功能準備好被添加時(在當前的提交點,它們應該被添加),簡單地合併這些分支會更容易嗎? – ArtforLife