Saya punya dua cabang yang sepenuhnya digabung.
Namun, setelah penggabungan selesai, saya menyadari bahwa satu file telah dikacaukan oleh penggabungan (orang lain melakukan format otomatis, gah), dan itu akan lebih mudah untuk mengubah ke versi baru di cabang lain, dan kemudian masukkan kembali satu baris perubahan saya setelah membawanya ke cabang saya.
Jadi apa cara termudah di git untuk melakukan ini?
git
git-branch
branching-and-merging
madlep
sumber
sumber
Jawaban:
Jalankan ini dari cabang tempat Anda ingin file berakhir:
Formula umum:
Beberapa catatan (dari komentar):
myfile.txt
danmydir
sebuah alternatif:
sumber
''
mereka sehingga mereka tidak bisa ditafsirkan oleh shell.Saya akhirnya pada pertanyaan ini pada pencarian serupa. Dalam kasus saya, saya ingin mengekstrak file dari cabang lain ke direktori kerja saat ini yang berbeda dari lokasi asli file. Jawaban :
sumber
git diff <other branch> <path to file>
berfungsi dengan baik.Bagaimana dengan menggunakan perintah checkout:
sumber
git diff
mendukung--stat
argumen yang pada dasarnya melakukan hal yang sama dengan diffstat.1) Pastikan Anda berada di cabang tempat Anda membutuhkan salinan file tersebut. untuk misalnya: saya ingin file cabang di master sehingga Anda perlu checkout atau harus di master
git checkout master
2) Sekarang checkout file tertentu saja yang Anda inginkan dari cabang ke master,
di sini
sub_branch
berarti di mana Anda memiliki file itu diikuti dengan nama file yang perlu Anda salin.sumber
Mengikuti jawaban madlep Anda juga bisa menyalin satu direktori dari cabang lain dengan direktori blob.
Mengenai pertanyaan op jika Anda hanya mengubah satu file di sana, ini akan berfungsi dengan baik ^ _ ^
sumber
origin/other-branch
untuk merujuk ke cabang repo. Dasar, tapi gigit aku. (jawabannya hebat - tidak perlu diedit)Saya akan menggunakan
git restore
(tersedia sejak git 2.23)git restore --source otherbranch path/to/myfile.txt
Mengapa lebih baik daripada opsi lain?
git checkout otherbranch -- path/to/myfile.txt
- Ini menyalin file ke direktori kerja tetapi juga ke area pementasan (efek yang sama seperti jika Anda akan menyalin file ini secara manual dan dieksekusigit add
di atasnya).git restore
tidak menyentuh area pementasan (kecuali jika diminta oleh--staged
opsi).git show otherbranch:path/to/myfile.txt > path/to/myfile.txt
menggunakan pengalihan shell standar. Jika Anda menggunakan Powershell maka mungkin ada masalah dengan pengkodean teks atau Anda bisa mendapatkan file yang rusak jika itu biner . Dengangit restore
mengubah file dilakukan semua olehgit
executable.Keuntungan lain adalah Anda dapat mengembalikan seluruh folder dengan:
git restore --source otherbranch path/to
atau dengan
git restore --overlay --source otherbranch path/to
jika Anda ingin menghindari menghapus file. Misalnya jika ada lebih sedikit fileotherbranch
daripada di direktori kerja saat ini (dan file-file ini dilacak ) tanpa--overlay
opsigit restore
akan menghapusnya. Tapi ini adalah bahaviour default yang bagus, Anda kemungkinan besar ingin keadaan direktori sama seperti diotherbranch
, bukan "sama tetapi dengan file tambahan di cabang saya saat ini"sumber
git restore
cara untuk menyalin file dari cabang sumber ke file baru di cabang target? Dengan git show saya bisa melakukan ini dengan pengalihan shell (git show otherbranch:path/to/file1.txt > path/to/file2.txt
), tapi saya ingin menghindari pengalihan shell karena alasan yang Anda sebutkan.git restore
(tapi siapa yang tahu;)). Masalah pengalihan ini pada dasarnya adalah masalah Powershell, tidak yakin apakah ada shell lain yang bermasalah dengannya. Saya biasanya kembali ke "git bash" atau bahkan "cmd" di mana saya perlu menggunakangit show
perintah " with redirection". Atau gunakan GUI seperti GitExtensions di mana Anda dapat menelusuri pohon file komit dan klik "Simpan sebagai" pada file apa pun.Harap perhatikan bahwa dalam jawaban yang diterima, opsi pertama akan mem - stage seluruh file dari cabang lain (seperti yang
git add ...
telah dilakukan), dan bahwa opsi kedua hanya menghasilkan menyalin file, tetapi tidak melakukan tahapan pada perubahan (seolah-olah Anda memiliki baru mengedit file secara manual dan memiliki perbedaan yang luar biasa).Git salin file dari cabang lain tanpa mementaskannya
Perubahan yang dilakukan (misalnya
git add filename)
:Perubahan luar biasa (tidak dipentaskan atau dilakukan):
sumber