Bagaimana saya hanya melakukan beberapa file?

259

Saya punya dua proyek. Salah satunya adalah proyek "resmi" dan yang kedua adalah modifikasi ringan (beberapa file ditambahkan). Saya membuat cabang baru dan saya menaruh file baru kepada mereka. Tetapi dalam pengembangan beberapa file umum untuk kedua cabang diubah.

Bagaimana saya hanya melakukan file-file ini?

Nips
sumber
Apakah kedua proyek terhubung ke repositori git yang sama?
Oleksandr
Ya, ini adalah repositori yang sama, tetapi saya tidak ingin meletakkan cabang saya ke server
Nips
Jadi mengapa Anda tidak menggabungkan cabang baru Anda untuk dikuasai (atau cabang resmi lainnya)
Oleksandr
1
Jawaban untuk pertanyaan-pertanyaan ini akan membantu Anda: stackoverflow.com/questions/7161860/… stackoverflow.com/questions/7175869/…
eckes

Jawaban:

261

Saya kira Anda ingin mengkomit perubahan ke satu cabang dan kemudian membuat perubahan itu terlihat di cabang lain. Di git Anda seharusnya tidak memiliki perubahan di atas KEPALA saat mengganti cabang.

Anda hanya mengikat file yang diubah dengan:

git commit [some files]

Atau jika Anda yakin memiliki area pementasan yang bersih, Anda dapat melakukannya

git add [some files]       # add [some files] to staging area
git add [some more files]  # add [some more files] to staging area
git commit                 # commit [some files] and [some more files]

Jika Anda ingin membuat komit tersedia di kedua cabang yang Anda lakukan

git stash                     # remove all changes from HEAD and save them somewhere else
git checkout <other-project>  # change branches
git cherry-pick <commit-id>   # pick a commit from ANY branch and apply it to the current
git checkout <first-project>  # change to the other branch
git stash pop                 # restore all changes again
Alex
sumber
22
Untuk benar-benar melakukan hanya file-file itu, bahkan jika perubahan lain telah dipentaskan, contoh kedua ( git commit [some files], yang menyiratkan --onlysakelar) harus digunakan. Contoh pertama ( git add [some files]diikuti oleh git commit) juga akan melakukan perubahan lain yang telah dipentaskan.
Lexikos
4
Saya akan membantu memberikan contoh untuk git commit [beberapa file]. seperti bagaimana Anda mengganti [beberapa file], koma, spasi putih?
Claudiu Creanga
2
@claudiu biasanya shell stuff dibatasi oleh ruang. Dan jika Anda menyelam cukup dalam, Anda bisa mengubahnya menjadi apa saja
Alex
Jika Anda dapat menambahkan beberapa contoh, jawaban ini akan sangat bagus.
Yamur
154

Dapatkan daftar file yang ingin Anda komit

$ git status

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

modified:   file1
modified:   file2
modified:   file3
modified:   file4

Tambahkan file ke pementasan

$ git add file1 file2

Periksa untuk melihat apa yang Anda lakukan

$ git status

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   file1
    modified:   file2

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   file3
    modified:   file4

Komit file dengan pesan komit

$ git commit -m "Fixed files 1 and 2"

Jika Anda secara tidak sengaja melakukan file yang salah

$ git reset --soft HEAD~1

Jika Anda ingin menghapus stage file dan mulai lagi dari awal

$ git reset

Unstaged changes after reset:
M file1
M file2
M file3
M file4
Abram
sumber
92

Anda dapat melakukan beberapa file yang diperbarui, seperti ini:

git commit file1 file2 file5 -m "commit message"
Adriano Rivolli
sumber
30

Beberapa dari ini tampaknya "tidak lengkap"

Sekelompok orang TIDAK akan tahu jika mereka harus menggunakan tanda kutip, dll.

Tambahkan 1 file spesifik yang menunjukkan jalur lokasi juga

git add JobManager/Controllers/APIs/ProfileApiController.cs

Komit (ingat, komit hanya lokal, tidak memengaruhi sistem lain)

git commit -m "your message"  

Tekan untuk repo jarak jauh

git push  (this is after the commit and this attempts to Merge INTO the remote location you have instructed it to merge into)

Jawaban lain menunjukkan simpanan, dll. Yang terkadang ingin Anda lakukan

Tom Stickel
sumber
11

Jika Anda sudah mementaskan file, cukup hapus stage mereka:

git reset HEAD [file-name-A.ext] [file-name-B.ext]

Kemudian tambahkan sedikit demi sedikit kembali.

kaisar
sumber
11

Misalkan Anda membuat perubahan pada banyak file, seperti:

  • File1
  • File2
  • File3
  • File4
  • File5

Tetapi Anda hanya ingin melakukan perubahan File1 dan File3.

Ada dua cara untuk melakukan ini:

1.Stage hanya dua file ini, menggunakan:

git add file1 file2

lalu, komit

git commit -m "your message"

lalu dorong,

git push

2.Komit langsung

git commit file1 file3 -m "my message"

lalu dorong,

git push

Sebenarnya metode pertama berguna jika kita memodifikasi file secara teratur dan mementaskannya -> Proyek Besar, umumnya proyek Langsung.
Tetapi jika kita memodifikasi file dan tidak mementaskannya maka kita dapat melakukan komit langsung -> Proyek kecil

KamalDeep
sumber
Ketika tidak menentukan nama file seperti contoh kedua Anda sarankan, git mengasumsikan flag perintah untuk argumen ini --only. Kemudian, itu akan menjadi perintah yang sama dengan git commit --only file1 --only file3 -m "my message"atau menggunakan jalan pintas sebagai git commit -o file1 -o file3 -m "my message"Referensi: git-scm.com/docs/git-commit
pengguna
0

Ini adalah pendekatan sederhana jika Anda tidak memiliki banyak perubahan kode:

1. git stash
2. git stash apply
3. remove the files/code you don't want to commit
4. commit the remaining files/code you do want

Kemudian jika Anda ingin kode yang Anda hapus (bit yang tidak Anda komit) di komit terpisah atau cabang lain, maka saat masih di cabang ini lakukan:

5. git stash apply
6. git stash

Dengan langkah 5 karena Anda sudah menerapkan simpanan dan mengkomit kode yang Anda inginkan di langkah 4, perbedaan dan tidak terlacak dalam simpanan yang baru diterapkan hanyalah kode yang Anda hapus di langkah 3 sebelum Anda berkomitmen pada langkah 4.

Karena langkah 6 adalah tumpukan kode yang tidak Anda [ingin] komit, karena Anda mungkin tidak benar-benar ingin kehilangan perubahan itu, bukan? Jadi simpanan baru dari langkah 6 sekarang dapat dilakukan untuk cabang ini atau cabang lain dengan melakukan simpanan git berlaku pada cabang yang benar dan melakukan.

Jelas ini mengandaikan Anda melakukan langkah-langkah dalam satu aliran, jika Anda menyembunyikan di titik lain dalam langkah-langkah ini Anda harus mencatat ref penyimpanan untuk setiap langkah di atas (bukan hanya simpanan dasar dan menerapkan simpanan terbaru).

James
sumber