2012-07-17 35 views
1

在開始噴射git命令之前,我使用Windows 7-64bit與TortoiseGit(當前爲v1.7.11.3),因爲我是Git的新手。合併刪除並添加錯誤的文件

我的DEV分支比當前的遠程主控舊,我更新DEV並解決衝突。
DEV分支已將提交提交到遠程DEV分支,因此rebase是不可能的 - 據我所知。

爲什麼會發生這種行爲,我該如何避免它?

  1. Checkout master(切換到本地主)
  2. Pull origin master(無衝突)
  3. Checkout DEV(切換到Dev分支)
  4. Merge master(適用於本地主變爲本地Dev分支)
  5. 修復衝突和commit修改後的文件(自動合併和固定衝突文件)

當我打開log時,我會看到「父1」文件在提交窗口和「父2」文件中,這些文件如圖所示。這裏是奇怪的部分,文件(本地/遠程是相同的)主已刪除現在是添加和新文件是刪除
此外,儘管有一些應該!「父2」文件沒有產生任何衝突!

新的/刪除的文件的工作與我的預期相反。這是爲什麼 ?
如果一個文件在master中是新的,並且我合併到DEV分支中,那麼我希望它在合併之後存在。
我的猜測是DEV分支被認爲是主分支,而不是我合併到DEV中的分支(主分支)。

我沒有選擇使用Revert來重新創建已刪除的文件(那些在主文件中實際上是新的文件)。

+0

是否有可能在某個階段恢復了合併?如果是這樣,那麼你會發現重新合併會導致你這種問題,你將需要恢復回覆。 (沒有作出這個答案,因爲我正在做出你可能已經完成的可能假設) – 2012-07-17 12:26:48

+0

DEV分支先前沒有與主合併過,所以沒有還原合併。 – Kim 2012-07-17 12:31:02

+0

有一個原因可能會導致您要發出控制檯命令:它不像用散文描述UI操作那樣含糊不清,並且會讓您創建一個[SSCCE](http://sscce.org/)讓我們重現您的問題。我全部用於IDE和GUI工具,但限制自己對它們的描述很難描述你的問題*。 – millimoose 2012-07-17 13:59:03

回答

2

您的合併方向不正確,因爲我看到它:

你應該這樣做:

git checkout master 
git pull origin master 

在這裏你有兩個變種:

1)如果你不希望重寫開發在遙控器上的分支歷史然後你必須保持原樣,但要做

git merge dev # will produce merge commit if not fast-forward 

2)或if你不那麼在意Dev分支歷史

git checkout dev 
git rebase master # now all commits that happened in dev will be "on top" of master, master will be behind 
git checkout master 
git merge dev # will result in fast-forward merge without merge commit 

現在,爲了回到狀態故障合併之前,你可以做(​​如果合併是您在Dev分支做的最後一件事):

git checkout dev 
git reset --hard HEAD~1 

現在您可以正確合併。在第二種情況下,除非您使用-f標誌,否則大多數時間將dev分支推送到遠程開發將被禁止爲非快進。希望有所幫助。

+0

選項2)工作,儘管日誌現在出現故障。另外,我得到一個錯誤「無法創建文件X」,其中X是'dev'中''dev''中沒有的新文件。其他新文件沒有給出這個錯誤。由於這個錯誤,'reset --hard'沒有運行,我不得不手動去做。 – Kim 2012-07-23 09:58:32

+0

你叫亂序實際上是rebase正常的。這個想法是,你從開發分支中發生的所有提交,因爲它與主分離,然後「假裝」你實際上在主提示之上提交它們。即移動開發分支的基地。 – 2012-07-23 14:55:43