我有TEST
分支,然後我有master
分支。我怎樣才能得到其他分支git中的新文件
我有文件夾叫DATA
與子文件夾和文件。
現在,在我的主人,我有
- 新的文件,這是不是在測試
- 修改過的文件都在測試和掌握主
- 文件,但在測試中刪除現在
我只想更新來自主分支的新文件的TEST分支,以便TEST分支的所有其他應用程序都不應該在那裏。
我能做到這一點很容易與rsync
但只是在想如果能夠在git
我有TEST
分支,然後我有master
分支。我怎樣才能得到其他分支git中的新文件
我有文件夾叫DATA
與子文件夾和文件。
現在,在我的主人,我有
我只想更新來自主分支的新文件的TEST分支,以便TEST分支的所有其他應用程序都不應該在那裏。
我能做到這一點很容易與rsync
但只是在想如果能夠在git
做你應該小心一點這個,因爲有不同的答案相似,但不完全是最相同的,問題。例如假設提交歷史看起來是這樣的:
A - B - C <-- master
\
D - E <-- TEST
這裏master
和TEST
開始與一個共同的承諾,A
,然後發散。讓我們假設共同提交A
具有這些文件(目錄DATA/
如果你喜歡,但我只是命名文件):
file_A1
file_A2
進一步假設提交B
增加file_B1
但刪除file_A2
。然後,承諾C
增加file_C1
並略微修改file_A1
。
這意味着如果你git checkout master
你會得到修改file_A1
內容的三個文件(A1,B1和C1)。
現在假設提交D
修改file_A1
並添加file_B1
和file_D1
。然後提交E
刪除file_B1
並添加其他內容。
這意味着如果你git checkout TEST
你會得到三個文件(A1,A2和D1)與修改後的file_A1
內容(可能不同於版本進行修改,提交C
,或可作爲內容犯同樣的C
)。
當您詢問「TEST
中的文件不在master
」中時,file_A2
是否算在內?如果你git checkout TEST
;它不在那裏,如果你git checkout master
;但它是那裏在共同的起點,承諾A
。
當你想知道「在兩個文件中都修改過的文件」時:顯然file_A1
被修改了。但是如果兩者的變化相同,那麼file_A1
具有相同的內容,而不管哪個分支被檢出。是「在兩個修改」,或不?
什麼混帳需要你做回答這些問題是選擇是否要比較兩個特定修訂,還是要考慮的東西更像是一個三方合併(你會得到什麼,如果你試圖合併TEST
和master
使用它們的合併基礎版本A
作爲起點)。
git diff <options> master TEST
這將比較提交C
(什麼master
指向的,即,所述主分支的「尖端」)對提交E
(分支TEST
的尖端)。所以,你比較兩個file_A1
s和看到提交E
有file_A2
和file_D1
,缺乏file_B1
。
這裏的<options>
部分可以是空的,或者可以在下文中所描述的。
mergebase=$(git merge-base master TEST)
git diff <options> $mergebase master
git diff <options> $mergebase TEST
這確實兩個單獨的diff,合併基的(提交A
)針對master
,以及對TEST
合併-鹼。
第一個差異會告訴你,在分支master
,從A
到C
的變化是修改file_A1
,刪除file_A2
,加file_B1
,並添加file_C1
。
這是怎樣操作的git的使用弄清楚如何做一個分支合併。事實上,有用於運行git diff
對兩個分支的合併基礎的特殊語法,對那兩個分支之一的提示:
git diff <options> TEST...master # three dots
這並不等同於第一DIFF(git diff <options> $mergebase master
)。到合併基礎比較分支TEST
的提示:
git diff <options> master...TEST # again, three dots
至於<diff options>
,如果你不感興趣的不同內容的文件的,明顯的選項下手爲--name-status
,打印名稱和文件狀態-ES和--no-renames
,關閉重命名檢測(除非你想重命名檢測,在這種情況下,加-M
代替)。
如果檢出差異選擇的提交,就會得到兩棵樹之間的變化,文件將顯示爲已添加,刪除或修改(分別爲A
,D
和狀態)。這裏有更多的可能性:T
如果常規文件被替換爲符號鏈接,反之亦然(以及更多與子模塊有關的特殊情況); C
(加上一個數字相似度值)如果添加--find-copies-harder
和/或-C
選項發生;和R
(加上一個數字值,就像C
)發生重命名檢測。 C
和R
個案不僅打印狀態和文件名,還打印「原始文件名」。
您可以添加--diff-filter
以僅選擇特定事件:例如,--diff-filter=A
將僅選擇那些狀態爲A
(已添加)的文件。