Cara melakukan perubahan pada cabang baru

150

Saya baru saja membuat perubahan ke cabang. Bagaimana saya bisa melakukan perubahan ke cabang lain?

Saya mencoba menggunakan:

git checkout "the commmit to the changed branch" -b "the other branch"

Namun, saya tidak berpikir ini adalah hal yang benar untuk dilakukan, karena dalam hal ini saya membuat cabang baru alih-alih melakukan perubahan pada "cabang lain".

Haruskah saya menggunakan perintah berikut sebagai gantinya?

git merge "the other branch"
pengguna1988385
sumber
Hanya satu komit atau beberapa?
Carl Norum

Jawaban:

267

git checkout -b your-new-branch

git add <files>

git commit -m <message>

Pertama, checkout cabang baru Anda. Kemudian tambahkan semua file yang ingin Anda komit untuk pementasan. Terakhir, komit semua file yang baru saja Anda tambahkan. Anda mungkin ingin melakukan git push origin your-new-branchsesudahnya sehingga perubahan Anda muncul di remote.

John Brodie
sumber
1
karena saya mendapatkan cabang baru dari git checkout v3.0 (cabang sebelum saya membuat perubahan) cabang baru, Apakah saya masih perlu menggunakan "git add <files>"?
user1988385
Anda dapat melakukan git statusuntuk melihat apa yang sedang dipentaskan dan apa yang tidak.
John Brodie
5
Mengapa keduanya git adddan git commit -a?
Carl Norum
11
Bukannya git checkout -b your-new-branchbukan git checkout your-new-branch?
Schrodinger's'Cat
1
bagaimana kalau saya sudah melacak file dan saya ingin beralih ke cabang baru menambahkan file-file itu ke cabang yang baru dibuat?
keledai-raja beberapa pertanyaan
57

Jika Anda belum melakukan perubahan

Jika perubahan Anda kompatibel dengan cabang lainnya

Ini adalah kasus dari pertanyaan karena OP ingin komit ke cabang baru dan juga berlaku jika perubahan Anda kompatibel dengan cabang target tanpa memicu overwrite.

Seperti dalam jawaban yang diterima oleh John Brodie, Anda dapat checkout kantor cabang baru dan melakukan pekerjaan:

git checkout -b branch_name
git add <files>
git commit -m "message"

Jika perubahan Anda tidak kompatibel dengan cabang lainnya

Jika Anda mendapatkan kesalahan:

error: Your local changes to the following files would be overwritten by checkout:
...
Please commit your changes or stash them before you switch branches

Kemudian Anda dapat menyimpan pekerjaan Anda, membuat cabang baru, lalu memunculkan perubahan simpanan Anda, dan menyelesaikan konflik:

git stash
git checkout -b branch_name
git stash pop

Ini akan seolah-olah Anda telah melakukan perubahan itu setelah membuat cabang baru. Maka Anda dapat melakukan seperti biasa:

git add <files>
git commit -m "message"

Jika Anda telah melakukan perubahan

Jika Anda ingin menyimpan komit di cabang asli

Lihat jawaban oleh Carl Norum dengan memetik ceri, yang merupakan alat yang tepat dalam kasus ini:

git checkout <target name>
git cherry-pick <original branch>

Jika Anda tidak ingin menyimpan komitmen di cabang asli

Lihat jawaban oleh joeytwiddle tentang duplikat potensial ini . Ikuti langkah-langkah di atas jika perlu, lalu putar kembali cabang asli:

git branch -f <original branch> <earlier commit id>

Jika Anda telah mendorong perubahan Anda ke remote bersama seperti GitHub, Anda tidak boleh mencoba roll-back ini kecuali Anda tahu apa yang Anda lakukan.

miguelmorin
sumber
3
Setiap orang harus mencoba kode ini. Karena sebagian besar orang yang mencari jawaban, mereka sudah memiliki beberapa perubahan dalam kode Anda yang ada.
Sushin Pv
2
Mengapa Anda menambahkan simpanan dan simpanan pop? Saat Anda checkout cabang baru, perubahan Anda akan tersedia untuk ditambahkan dan dikomit, tidak perlu disimpan.
Tristan
@ Christian Anda benar dalam kasus di mana perubahannya kompatibel dan file tidak ditimpa. Jika tidak, saya mengerti. error: Your local changes to the following files would be overwritten by checkout: ... Please commit your changes or stash them before you switch branches.Apakah Anda ingin menulis jawaban baru atau mengedit jawaban saya? Jika tidak, saya bisa mengeditnya sendiri.
miguelmorin
Ok, kamu benar sekali. Saya pikir Anda harus menyelesaikan jawaban Anda, untuk menunjukkan apa yang dibawanya selain jawaban yang diterima.
Tristan
@ Christian saya melakukan itu. OP bertanya tentang cabang baru, dalam hal ini jawaban yang diterima adalah yang benar. Saya menyimpan milik saya karena orang lain menganggap jawaban saya bermanfaat. Ini menjadi jawaban yang panjang dan saya senang mengedit dengan umpan balik apa pun.
miguelmorin
24

Jika saya mengerti benar, Anda telah membuat komitmen changed_branchdan ingin menyalin komitmen itu other_branch? Mudah:

git checkout other_branch
git cherry-pick changed_branch
Carl Norum
sumber
5
Ini adalah jawaban yang tepat untuk apa yang dia coba capai.
Sean