Câu hỏi Làm thế nào để chọn lọc hợp nhất hoặc chọn thay đổi từ một chi nhánh khác trong Git?


Tôi đang sử dụng git trên một dự án mới có hai nhánh song song - nhưng hiện đang thử nghiệm - phát triển:

  • master: nhập khẩu của codebase hiện tại cộng với một vài mod mà tôi thường chắc chắn
  • exp1: nhánh thử nghiệm # 1
  • exp2: nhánh thử nghiệm # 2

exp1 và exp2 đại diện cho hai cách tiếp cận kiến ​​trúc rất khác nhau. Cho đến khi tôi tiến xa hơn, tôi không có cách nào biết được cái nào (nếu một trong hai) sẽ hoạt động. Khi tôi tiến bộ trong một nhánh, đôi khi tôi có các chỉnh sửa hữu ích trong ngành khác và chỉ muốn hợp nhất những nhánh đó.

Cách tốt nhất để hợp nhất những thay đổi có chọn lọc từ một nhánh phát triển này sang nhánh khác trong khi để lại đằng sau mọi thứ khác là gì?

Phương pháp tiếp cận tôi đã xem xét:

  1. git merge --no-commit tiếp theo là thay đổi thủ công một số lượng lớn các chỉnh sửa mà tôi không muốn làm cho phổ biến giữa các nhánh.

  2. Sao chép thủ công các tệp phổ biến vào thư mục tạm thời theo sau git checkout để di chuyển đến nhánh khác và sau đó sao chép thủ công nhiều hơn từ thư mục tạm thời vào cây đang hoạt động.

  3. Một biến thể ở trên. Bỏ qua exp các nhánh cho bây giờ và sử dụng hai kho lưu trữ cục bộ bổ sung để thử nghiệm. Điều này làm cho việc sao chép thủ công các tệp đơn giản hơn nhiều.

Cả ba phương pháp này đều có vẻ tẻ nhạt và dễ bị lỗi. Tôi hy vọng có một cách tiếp cận tốt hơn; cái gì đó giống với tham số đường dẫn bộ lọc sẽ tạo git-merge chọn lọc hơn.


1159
2018-01-16 04:55


gốc


Nếu các thay đổi trong các nhánh thử nghiệm của bạn được tổ chức tốt trong các cam kết riêng biệt, tốt hơn là suy nghĩ về việc hợp nhất chọn lọc cam kết thay vì tệp chọn lọc. Hầu hết các câu trả lời dưới đây giả định đây là trường hợp. - akaihola
Sẽ không phải là sự kết hợp của git merge -s ours --no-committheo sau bởi một số git read-tree là một giải pháp tốt cho việc này? Xem stackoverflow.com/questions/1214906/… - VonC
Một câu hỏi gần đây có câu trả lời một dòng, được viết tốt: stackoverflow.com/questions/10784523/… - brahn


Các câu trả lời:


Bạn sử dụng anh đào lệnh để có được các cam kết riêng lẻ từ một nhánh.

Nếu (các) thay đổi bạn muốn không nằm trong các cam kết riêng lẻ, thì hãy sử dụng phương pháp được hiển thị ở đây để chia cam kết thành từng cam kết riêng lẻ. Nói chung, bạn sử dụng git rebase -i để có được cam kết ban đầu để chỉnh sửa, sau đó git reset HEAD^ để chọn lọc hoàn nguyên thay đổi, sau đó git commit để cam kết bit đó dưới dạng cam kết mới trong lịch sử.

Có một phương pháp hay khác ở đây trong tạp chí Red Hat, nơi họ sử dụng git add --patch hoặc có thể git add --interactive cho phép bạn chỉ thêm các phần của một đoạn, nếu bạn muốn chia nhỏ các thay đổi khác nhau cho một tệp riêng lẻ (tìm kiếm trong trang đó để "chia nhỏ").

Sau khi chia nhỏ các thay đổi, bây giờ bạn có thể chọn lựa những thứ bạn muốn.


390
2018-01-16 06:01



Từ sự hiểu biết của tôi, điều này là không cần thiết phức tạp hơn câu trả lời bình chọn cao hơn. - Alexander Bird
Đây là câu trả lời đúng về mặt kỹ thuật, câu trả lời đúng xuất hiện "phức tạp". --- Câu trả lời bình chọn cao hơn chỉ là một câu trả lời "không lừa" nhanh chóng và dơ bẩn, mà đối với hầu hết mọi người là tất cả những gì họ nói về (: - Jacob
@akaihola: HEAD ^ là chính xác. Xem man git-rev-parse: Hậu tố ^ đối với tham số sửa đổi có nghĩa là phụ huynh đầu tiên của đối tượng cam kết đó. Ký hiệu tiền tố ^ được sử dụng để loại trừ các cam kết có thể truy cập từ một cam kết. - Tyler Rick
Tôi chỉ muốn chia sẻ một cách tiếp cận khác có vẻ sạch sẽ và ít phức tạp hơn: jasonrudolph.com/blog/2009/02/25/… tổng số đơn giản và tuyệt vời - superuseroi
Bối rối bởi cuộc tranh luận về cách tiếp cận nào là 'chính xác'? Xem xét sự khác biệt giữa các tệp & cam kết (xem Chú thích ở dưới cùng). OP muốn hợp nhất FILES và không đề cập đến COMMITS. Câu trả lời được bình chọn cao hơn là dành riêng cho các tệp; câu trả lời được chấp nhận sử dụng lựa chọn anh đào, cụ thể là cam kết. Cherry-pick có thể là chìa khóa để kết hợp các commit một cách có chọn lọc, nhưng nó có thể rất đau đớn khi di chuyển các file từ một nhánh này sang nhánh khác. Mặc dù cam kết là trái tim của sức mạnh của git, đừng quên các tệp vẫn có vai trò! - Kay V


Tôi đã có cùng một vấn đề giống như bạn đã đề cập ở trên. Nhưng tôi đã tìm thấy điều này rõ ràng hơn trong việc giải thích câu trả lời.

Tóm lược:

  • Kiểm tra (các) đường dẫn từ nhánh bạn muốn hợp nhất,

    $ git checkout source_branch -- <paths>...
    
  • hoặc để hợp nhất các khối

    $ git checkout -p source_branch -- <paths>...
    

    Ngoài ra, hãy sử dụng đặt lại và sau đó thêm với tùy chọn -p,

    $ git reset <paths>...
    $ git add -p <paths>...
    
  • Cuối cùng cam kết

    $ git commit -m "'Merge' these changes"
    

820
2017-09-03 08:48



Bài viết liên quan của Bart J là cách tiếp cận tốt nhất. Rõ ràng, đơn giản, một lệnh. Đó là cái tôi sắp sử dụng. :) - Pistos
Đây không phải là sự hợp nhất thực sự. Bạn đang chọn thay đổi theo tệp thay vì cam kết và bạn sẽ mất mọi thông tin cam kết hiện có (tác giả, thư). Cấp, điều này là tốt nếu bạn muốn kết hợp tất cả các thay đổi trong một số tập tin và nó là ok rằng bạn phải làm lại tất cả các cam kết. Nhưng nếu các tệp chứa cả hai thay đổi để hợp nhất và những thay đổi khác để loại bỏ, một trong những phương pháp được cung cấp trong các câu trả lời khác sẽ phục vụ bạn tốt hơn. - akaihola
@mykhal và những người khác: giai đoạn này các tệp trong chỉ mục tự động, vì vậy bạn nếu bạn đã kiểm tra foo.c làm git reset HEAD foo.c để unstage tập tin đó và sau đó bạn có thể diff nó. Tôi tìm thấy điều này sau khi thử nó và quay lại đây để tìm câu trả lời cho điều này - michiakig
để xem các thay đổi bạn cũng có thể sử dụng: git diff --cached - OderWat
Theo điều này câu trả lời  git checkout -p <revision> -- <path> sẽ giống như việc phát hành ba lệnh đầu tiên bạn đã mô tả :) - 7hi4g0


Để chọn lọc hợp nhất các tệp từ một chi nhánh vào một chi nhánh khác, hãy chạy

git merge --no-ff --no-commit branchX

Ở đâu branchX là nhánh bạn muốn hợp nhất từ ​​nhánh hiện tại.

Các --no-commit tùy chọn sẽ đặt giai đoạn các tệp đã được Git hợp nhất mà không thực sự cam kết chúng. Điều này sẽ cung cấp cho bạn cơ hội để sửa đổi các tập tin sáp nhập tuy nhiên bạn muốn và sau đó cam kết chúng mình.

Tùy thuộc vào cách bạn muốn hợp nhất các tệp, có bốn trường hợp:

1) Bạn muốn hợp nhất đúng.

Trong trường hợp này, bạn chấp nhận các tệp đã hợp nhất theo cách Git sáp nhập chúng một cách tự động và sau đó cam kết chúng.

2) Có một số tệp bạn không muốn hợp nhất.

Ví dụ: bạn muốn giữ lại phiên bản trong nhánh hiện tại và bỏ qua phiên bản trong nhánh bạn đang hợp nhất.

Để chọn phiên bản trong nhánh hiện tại, hãy chạy:

git checkout HEAD file1

Thao tác này sẽ truy xuất phiên bản của file1 trong nhánh hiện tại và ghi đè lên file1 được Git tự động hóa.

3) Nếu bạn muốn phiên bản trong branchX (và không phải là một hợp nhất đúng).

Chạy:

git checkout branchX file1

Thao tác này sẽ truy xuất phiên bản của file1 trong branchX và ghi đè file1 được Git tự động hợp nhất.

4) Trường hợp cuối cùng là nếu bạn muốn chỉ chọn các hợp nhất cụ thể trong file1.

Trong trường hợp này, bạn có thể chỉnh sửa sửa đổi file1 trực tiếp, cập nhật nó lên bất cứ điều gì bạn muốn phiên bản file1 để trở thành, và sau đó cam kết.

Nếu Git không thể hợp nhất tệp một cách tự động, nó sẽ báo cáo tệp dưới dạng "không bị chìm"và tạo một bản sao mà bạn sẽ cần phải giải quyết các xung đột theo cách thủ công.



Để giải thích thêm với ví dụ, giả sử bạn muốn hợp nhất branchX vào nhánh hiện tại:

git merge --no-ff --no-commit branchX

Sau đó bạn chạy git status lệnh để xem trạng thái của các tệp đã sửa đổi.

Ví dụ:

git status

# On branch master
# Changes to be committed:
#
#       modified:   file1
#       modified:   file2
#       modified:   file3
# Unmerged paths:
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#       both modified:      file4
#

Ở đâu file1, file2file3 là các tệp git đã tự động hợp nhất thành công.

Điều này có nghĩa là những thay đổi trong master và branchX cho tất cả ba tệp đó đã được kết hợp với nhau mà không có bất kỳ xung đột nào.

Bạn có thể kiểm tra cách hợp nhất được thực hiện bằng cách chạy git diff --cached;

git diff --cached file1
git diff --cached file2
git diff --cached file3

Nếu bạn tìm thấy một số hợp nhất không mong muốn thì bạn có thể

  1. chỉnh sửa trực tiếp tệp
  2. tiết kiệm
  3. git commit

Nếu bạn không muốn hợp nhất file1 và muốn giữ lại phiên bản trong nhánh hiện tại

Chạy

git checkout HEAD file1

Nếu bạn không muốn hợp nhất file2 và chỉ muốn phiên bản branchX

Chạy

git checkout branchX file2

Nếu bạn muốn file3 để được hợp nhất tự động, đừng làm gì cả.

Git đã sáp nhập nó vào thời điểm này.


file4 ở trên là một sự hợp nhất không thành công bởi Git. Điều này có nghĩa là có những thay đổi trong cả hai nhánh xảy ra trên cùng một dòng. Đây là nơi bạn sẽ cần phải giải quyết các xung đột theo cách thủ công. Bạn có thể loại bỏ việc sáp nhập được thực hiện bằng cách chỉnh sửa trực tiếp hoặc chạy lệnh thanh toán cho phiên bản trong nhánh bạn muốn file4 để trở thành.


Cuối cùng, đừng quên git commit.


241
2018-05-21 03:00



Cẩn thận mặc dù: Nếu git merge --no-commit branchX chỉ là một tiến nhanh, con trỏ sẽ được cập nhật và --no-cam do đó sẽ bị bỏ qua một cách âm thầm - cfi
@cfi Điều gì về việc thêm --no-ff để ngăn chặn hành vi đó? - Eduardo Costa
Tôi chắc chắn đề nghị cập nhật câu trả lời này với tùy chọn "--no-ff" của Eduardo. Tôi đọc qua toàn bộ sự việc (điều đó thật tuyệt vời) chỉ để việc hợp nhất của tôi được chuyển tiếp nhanh. - Funktr0n
Giải pháp này cho kết quả tốt nhất và linh hoạt. - Thiago Macedo
Không giống như câu trả lời có nhiều phiếu bầu nhất, giải pháp này đã lưu giữ lịch sử hợp nhất của tôi, điều này quan trọng đối với tôi khi tôi dệt một phần cam kết qua lại giữa các nhánh. Tôi đã không thử tất cả các giải pháp được đề xuất khác, vì vậy có lẽ một số người trong số họ cũng làm như vậy. - ws_e_c421


Tôi không thích các phương pháp trên. Sử dụng lựa chọn anh đào là rất tốt để chọn một thay đổi duy nhất, nhưng nó là một nỗi đau nếu bạn muốn mang lại tất cả những thay đổi ngoại trừ một số những cái xấu. Đây là cách tiếp cận của tôi.

Không có --interactive đối số bạn có thể chuyển đến git merge.

Đây là giải pháp thay thế:

Bạn có một số thay đổi trong chi nhánh 'tính năng' và bạn muốn mang một số nhưng không phải tất cả chúng vào 'chủ' theo cách không cẩu thả (nghĩa là bạn không muốn chọn anh đào và cam kết mỗi người)

git checkout feature
git checkout -b temp
git rebase -i master

# Above will drop you in an editor and pick the changes you want ala:
pick 7266df7 First change
pick 1b3f7df Another change
pick 5bbf56f Last change

# Rebase b44c147..5bbf56f onto b44c147
#
# Commands:
# pick = use commit
# edit = use commit, but stop for amending
# squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

git checkout master
git pull . temp
git branch -d temp

Vì vậy, chỉ cần bọc nó trong một kịch bản lệnh shell, thay đổi master thành $ và thay đổi tính năng thành $ từ và bạn tốt để đi:

#! /bin/bash
# git-interactive-merge
from=$1
to=$2
git checkout $from
git checkout -b ${from}_tmp
git rebase -i $to
# Above will drop you in an editor and pick the changes you want
git checkout $to
git pull . ${from}_tmp
git branch -d ${from}_tmp

85
2017-08-28 18:47



Vui lòng chỉnh sửa câu trả lời của bạn, chọn đoạn mã của bạn và nhấn vào biểu tượng "101 010" (biểu tượng thứ 3 trong nhóm thứ 2 của thanh công cụ) để thụt lề bằng bốn dấu cách. Điều này sẽ sửa định dạng. - akaihola
Tôi đã chỉnh sửa định dạng - đây là một phương pháp khá hay, nếu bạn muốn thực hiện lựa chọn các cam kết - 1800 INFORMATION
Tôi đang sử dụng kỹ thuật này bây giờ và có vẻ như nó đã hoạt động rất tốt. - dylanfm
Bạn có thể muốn thay đổi git rebase -i $to đến git rebase -i $to || $SHELL, để người dùng có thể gọi git --skip vv, nếu cần thiết nếu việc rebase thất bại. Cũng đáng giá chuỗi các dòng cùng với && thay vì dòng mới. - sircolinton
Thật không may, nó xuất hiện các liên kết trong câu trả lời là chết. - ThomasW


Có một cách khác để làm:

git checkout -p

Đó là sự kết hợp giữa git checkout và git add -p và có thể hoàn toàn chính xác những gì bạn đang tìm kiếm:

   -p, --patch
       Interactively select hunks in the difference between the <tree-ish>
       (or the index, if unspecified) and the working tree. The chosen
       hunks are then applied in reverse to the working tree (and if a
       <tree-ish> was specified, the index).

       This means that you can use git checkout -p to selectively discard
       edits from your current working tree. See the “Interactive Mode”
       section of git-add(1) to learn how to operate the --patch mode.

73
2017-08-25 01:31



Đây là phương pháp dễ nhất, đơn giản nhất, miễn là bạn chỉ có một số thay đổi có thể quản lý để hợp nhất. Tôi hy vọng nhiều người hơn sẽ nhận thấy câu trả lời này và upvote nó. Ví dụ: git checkout --patch exp1 file_to_merge - Tyler Rick
Câu trả lời tương tự được đăng trên câu hỏi này: stackoverflow.com/a/11593308/47185 - Tyler Rick
Oh, tôi không biết kiểm tra đã có một miếng vá! Tôi đã kiểm tra / thiết lập lại / add -p thay vào đó. - Daniel C. Sobral
Thực sự là phương pháp đơn giản nhất. git checkout -p featurebranch tên tập tin. Và điều tốt nhất là khi lệnh được chạy, nó cung cấp cho bạn một y / n / e /? / ... vv. tùy chọn để quyết định cách hợp nhất tệp. Tôi đã thử với e và tôi thậm chí có thể chỉnh sửa các bản vá trước khi áp dụng ... Làm thế nào mát mẻ là nó. Một lớp lót thực sự để hợp nhất các tệp chọn lọc từ các nhánh khác. - infoclogged


Trong khi một số câu trả lời là khá tốt, tôi cảm thấy không ai thực sự trả lời ràng buộc ban đầu của OP: chọn các tệp cụ thể từ các nhánh cụ thể. Giải pháp này làm điều đó, nhưng có thể tẻ nhạt nếu có nhiều tập tin.

Cho phép nói rằng bạn có master, exp1exp2 các chi nhánh. Bạn muốn kết hợp một tệp từ mỗi nhánh thử nghiệm thành chính. Tôi sẽ làm một cái gì đó như thế này:

git checkout master
git checkout exp1 path/to/file_a
git checkout exp2 path/to/file_b

# save these files as a stash
git stash
# merge stash with master
git merge stash

Điều này sẽ cung cấp cho bạn sự khác biệt trong tập tin cho mỗi tập tin bạn muốn. Chỉ có bấy nhiêu thôi. Không có gì ít hơn. Thật hữu ích khi bạn có các thay đổi tệp hoàn toàn khác nhau giữa các phiên bản - trong trường hợp của tôi, thay đổi một ứng dụng từ Rails 2 thành Rails 3.

CHỈNH SỬA: điều này sẽ hợp nhất các tệp nhưng thực hiện hợp nhất thông minh. Tôi đã không thể tìm ra cách sử dụng phương pháp này để có được thông tin khác biệt trong tập tin (có thể nó vẫn sẽ cho sự khác biệt cực đoan. Làm phiền những điều nhỏ như khoảng trắng được sáp nhập lại trừ khi bạn sử dụng -s recursive -X ignore-all-space Tùy chọn)


48
2018-05-07 11:38



Cũng lưu ý: bạn có thể thực hiện nhiều tệp từ một nhánh cụ thể, tất cả nội dòng, ví dụ: git checkout exp1 path/to/file_a path/to/file_x - EMiller
Cái này thật đẹp. tôi đã làm git checkout feature <path>/* để nhận các nhóm tệp. - isherwood
Điều này làm việc ok, nhưng thêm hai đối tượng cam kết thêm. Không phải là một vấn đề lớn nhưng hơi lộn xộn một chút - MightyPork
@MightyPork bạn nói đúng. Thật không may, kể từ khi tôi đã viết này từ lâu, tôi không còn chắc chắn tại sao "git stash" và "git merge stash" các bước trong đó thay vì "git commit". - Eric Hu
Ồ, rõ ràng, tôi nghĩ vậy. Bằng cách này, nó kết hợp một tệp, không nhất thiết ghi đè các thay đổi trước đó trên nhánh mục tiêu. - MightyPork


1800 THÔNG TIN của câu trả lời là hoàn toàn chính xác. Tuy nhiên, như git noob, "sử dụng git cherry-pick" là không đủ để tôi tìm ra điều này mà không cần đào bới một chút trên internet nên tôi nghĩ tôi sẽ đăng một hướng dẫn chi tiết hơn trong trường hợp bất kỳ ai khác đang ở trong thuyền tương tự.

Trường hợp sử dụng của tôi đã muốn chọn lọc kéo các thay đổi từ nhánh github của người khác thành của riêng tôi. Nếu bạn đã có một chi nhánh địa phương với những thay đổi, bạn chỉ cần thực hiện các bước 2 và 5-7.

  1. Tạo (nếu không được tạo) một chi nhánh địa phương với những thay đổi bạn muốn mang lại.

    $ git branch mybranch <base branch>

  2. Chuyển sang nó.

    $ git checkout mybranch

  3. Kéo xuống các thay đổi bạn muốn từ tài khoản của người khác. Nếu bạn chưa có, bạn sẽ muốn thêm chúng dưới dạng điều khiển từ xa.

    $ git remote add repos-w-changes <git url>

  4. Kéo tất cả mọi thứ từ chi nhánh của họ.

    $ git pull repos-w-changes branch-i-want

  5. Xem nhật ký cam kết để xem những thay đổi bạn muốn:

    $ git log 

  6. Chuyển trở lại nhánh bạn muốn kéo các thay đổi vào.

    $ git checkout originalbranch

  7. Cherry chọn cam kết của bạn, từng người một, với băm.

    $ git cherry-pick -x hash-of-commit

Đầu mũ: http://www.sourcemage.org/Git_Guide


42
2017-07-29 08:37



Mẹo: đầu tiên sử dụng git cherry lệnh (xem hướng dẫn sử dụng trước) để xác định các cam kết mà bạn chưa hợp nhất. - akaihola
Điều này hoạt động .. 1. tạo ra một chi nhánh mới 2.created một số tập tin / thực hiện một số thay đổi 3. cam kết 4. checkout master branch 5. Chạy git cherry-pick -x hash-of-commit và giải quyết xung đột hợp nhất là bạn tốt đi. - user2601010
Liên kết của bạn không hoạt động nữa. Bạn có thể cập nhật nó không? - creep3007


Đây là cách bạn có thể thay thế Myclass.java trong tập tin master chi nhánh với Myclass.java trong feature1 chi nhánh. Nó sẽ hoạt động ngay cả khi Myclass.java không tồn tại trên master.

git checkout master
git checkout feature1 Myclass.java

Lưu ý điều này sẽ ghi đè lên - không hợp nhất - và bỏ qua các thay đổi cục bộ trong nhánh chính.


37
2018-02-27 22:42



Điều này sẽ không hợp nhất. Nó sẽ chỉ ghi đè lên các thay đổi trên master với các thay đổi từ nhánh feature1. - Skunkwaffle
Hoàn hảo, tôi đang tìm kiếm loại hợp nhất này theirs ghi đè ours => +1 Chúc mừng;) - olibre
Một số lần tất cả các bạn muốn làm là thay thế toàn bộ tập tin, vì vậy đây là những gì tôi muốn, nhưng bạn cần phải chắc chắn rằng bạn muốn mất tất cả những thay đổi bạn đã thực hiện cho tập tin này. - MagicLAMP
Giải pháp sạch nhất, với điều kiện OP đặc biệt muốn thay thế toàn bộ tập tin bằng cách tương đương với một nhánh khác: 2. Manual copying of common files into a temp directory followed by ...copying out of the temp directory into the working tree. - Brent Faust


Cách đơn giản, thực sự hợp nhất các tệp cụ thể từ hai nhánh, không chỉ thay thế các tệp cụ thể bằng các tệp từ một nhánh khác.

Bước một: Khác biệt giữa các chi nhánh

git diff branch_b > my_patch_file.patch

Tạo một tệp bản vá của sự khác biệt giữa nhánh hiện tại và branch_b

Bước hai: Áp dụng bản vá trên các tệp phù hợp với mẫu

git apply -p1 --include=pattern/matching/the/path/to/file/or/folder my_patch_file.patch

ghi chú hữu ích về các tùy chọn

Bạn có thể dùng * như một ký tự đại diện trong mẫu bao gồm.

Dấu gạch chéo không cần phải được thoát.

Ngoài ra, bạn có thể sử dụng --exclude thay thế và áp dụng nó cho tất cả mọi thứ ngoại trừ các tập tin phù hợp với mô hình, hoặc đảo ngược các bản vá với -R

Tùy chọn -p1 là một sự lưu giữ từ lệnh * unix patch và thực tế là nội dung của tệp bản vá sẽ thêm vào mỗi tên tệp với a/hoặc là b/ (hoặc nhiều hơn tùy thuộc vào cách các tập tin vá được tạo ra) mà bạn cần phải dải để nó có thể tìm ra các tập tin thực sự để đường dẫn đến tập tin bản vá cần phải được áp dụng cho.

Xem trang hướng dẫn sử dụng cho git-apply để có thêm tùy chọn.

Bước ba: không có bước ba

Rõ ràng bạn muốn cam kết thay đổi của mình, nhưng ai nói bạn không có một số chỉnh sửa liên quan khác mà bạn muốn thực hiện trước khi thực hiện cam kết của mình.


22
2018-02-18 04:28



Điều này rất hữu ích khi current_branch có nhiều thay đổi "bổ sung" cần được bảo tồn. Có sự khác biệt về những thay đổi duy nhất được đưa vào bởi branch_b như: git diff HEAD ... branch_b (có - ba giai đoạn thực hiện thủ thuật ma thuật). - Saad Malik
@ masukomi, Ở bước 2, bạn không nên thêm tệp vá được tạo ở bước 1 làm đối số? - Spiralis
@Spiralis có. đã thêm nó. thông số cuối cùng. cảm ơn. - masukomi