簡體   English   中英

Git與遠程合並后文件丟失的變化(SourceTree,GitHub)

[英]Git Changes to file lost after merge with remote (SourceTree, GitHub)

我剛剛在多個團隊中多次報告過,在與GitHub.com上的原始回購合並后,某些變化正在丟失。 團隊成員都使用SourceTree作為他們的git客戶端。

我發現的共同主題是,似乎repo認為該文件在合並之前似乎在分支上有X個提交,然后在合並之后提交XY。 通過查看分支的提交日志,提交仍然存在,但由於某種原因,它們不會應用於相關文件。 在源代碼樹中,這是相同的,但如果您“關注重命名的文件”,它會引入所有提交。 文件名或文件夾結構絕對沒有變化。

這可能會發生什么?

https://www.dropbox.com/s/zrcb9tw2ptpb3b0/FileHistory_Commit.png?dl=0 https://www.dropbox.com/s/uc5v5d2bfztoicn/FileHistory_Develop.png?dl=0

重要的是要記住,git提交不依賴於特定文件,並且它們不是由diffs定義的; 每個提交只是整個存儲庫的快照。 因此,當您查看文件的“歷史記錄”時,由您使用的工具決定哪個提交與該文件“關聯”。 這通常以顯而易見的方式完成:如果提交的文件版本與提交的父文件版本不同,則該提交將包含在文件的歷史記錄中。

事情變得復雜的是當提交具有多個父項時,即在合並中。 通常情況下,如果存在只有父項之一的差異,則不希望在文件的歷史記錄中看到這些內容。 要了解原因,請考慮在分支中進行更改X的常見情況,在提交A中提交,然后在使用提交G將該分支合並到主服務器中。如果查看G和它的主要父級之間的差異,會看到改變X.但這不是X“真正”引入的地方; 發生在提交A中。因此,當查看文件的日志時,您不希望看到提交G,您只想查看提交A.例外情況是解決沖突時; 在這種情況下,合並本身會真正引入變更。 與主要次要父母相比,這可以通過文件中的差異來表示。 當您單擊“關注重命名的文件”時,SourceTree似乎包含合並提交,即使它與重命名的文件無關。

現在,當合並正確執行時,這一切都很好。 但是,在你的情況下,你有一些拙劣的合並 - 這就是為什么提交丟失的原因。 你的回購是私有的,所以我不能看它,並准確地告訴你哪些合並是拙劣的,如何,但這可能發生了什么。 開發人員做了一個git pull ,導致了合並沖突,這阻止了通常在pull / merge中發生的自動提交。 除了沖突的文件,開發人員還看到了他們沒有進行的臨時區域的更改。 他們認為他們不想提交隨機更改,因此他們解除了這些更改 ,修復了合並沖突並提交了。

正是那些他們解開的變化現在“丟失”了。 提交合並時,您承諾所提交的快照包含父母雙方都可以訪問的所有更改。 這意味着當您對其主要父級(這是開發人員在SourceTree列出“已更改文件”時看到的內容)執行正確合並的差異時,您應該看到輔助父級帶來的所有更改。

所以底線是這樣的:當你處於合並的中間並且你看到突然出現的變化時,你必須提交這些更改,或者中止合並

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM