Dorong komit ke cabang lain

385

Apakah mungkin untuk melakukan dan mendorong perubahan dari satu cabang ke cabang lainnya.

Asumsikan saya melakukan perubahan pada BRANCH1 dan ingin mendorongnya ke BRANCH2 .

Dari BRANCH1 , apakah valid untuk melakukan:

git push origin **BRANCH2**

Dan kemudian reset BRANCH1?

jviotti
sumber

Jawaban:

711

Itu hampir akan berhasil.

Saat mendorong ke cabang non-default, Anda perlu menentukan sumber ref dan target ref:

git push origin branch1:branch2

Atau

git push <remote> <branch with new changes>:<branch you are pushing to> 
Slaks
sumber
26
Apakah keduanya branch1dan branch2perlu berada di remote? Bagaimana jika Anda ingin mendorong dari lokal branch1ke remote origin branch2?
orad
11
@orad: Tidak. Bagian pertama sebenarnya hanya pengidentifikasi untuk komit lokal; bahkan tidak perlu menjadi cabang.
SLaks
6
@abhisekp: Gunakan sintaks yang sama. Untuk merujuk ke cabang sumber, gunakan<remote>/<branch>
SLaks
4
@abhisekp: Lakukan persis apa yang baru saja saya katakan. Cabang saat ini sama sekali tidak relevan.
SLaks
21
Berhati-hatilah dengan siapa pun yang tergoda (seperti saya) untuk berlari git push origin :branch2sambil berpikir bahwa itu hanya akan mendorong cabang lokal saat ini ke remote branch2, bahwa ia malah akan menghapus remote branch2! Cara yang benar adalah git push origin HEAD:branch2.
Helder Pereira
72

Tentu saja, meskipun itu hanya akan berfungsi jika itu adalah kemajuan cepat dari BRANCH2 atau jika Anda memaksanya. Sintaks yang benar untuk melakukan hal seperti itu adalah

git push <remote> <source branch>:<dest branch> 

Lihat deskripsi "refspec" pada halaman manual git push untuk detail lebih lanjut tentang cara kerjanya. Perhatikan juga bahwa dorongan gaya dan reset adalah operasi yang "menulis ulang sejarah", dan tidak boleh dilakukan oleh orang yang lemah hati kecuali Anda benar-benar yakin Anda tahu apa yang Anda lakukan sehubungan dengan repositori jarak jauh dan lainnya. orang yang memiliki garpu / klon dari proyek yang sama.

Ryan Stewart
sumber
6
Terima kasih! Saya hanya akan menambahkan bahwa Anda dapat memaksa git push --force remote local-branch:remote-branch.
Ferran Maylinch
16

Ini sangat sederhana. Misalkan Anda telah membuat perubahan pada Cabang A Anda yang berada di kedua tempat secara lokal dan jarak jauh tetapi Anda ingin mendorong perubahan ini ke Cabang B yang tidak ada di mana pun.

Langkah-01: buat dan alihkan ke cabang baru B

git checkout -b B

Langkah-02: Tambahkan perubahan di cabang lokal baru

git add. // atau file tertentu

Langkah-03: Lakukan perubahan

git commit -m "commit_message"

Langkah-04: Dorong perubahan pada cabang baru B . Perintah di bawah ini akan membuat cabang B baru juga dari jarak jauh

git push asal B

Sekarang, Anda dapat memverifikasi dari bitbucket bahwa cabang B akan memiliki satu lagi komit dari cabang A . Dan ketika Anda akan checkout cabang A perubahan ini tidak akan ada seperti ini telah didorong ke cabang B .

Catatan: Jika Anda telah melakukan perubahan Anda ke cabang A dan setelah itu Anda ingin menggeser perubahan itu ke cabang baru B maka Anda harus mengatur ulang perubahan itu terlebih dahulu. #HappyLearning

Bilal Ahmed Yaseen
sumber
2

Dalam kasus saya, saya memiliki satu komit lokal, yang tidak didorong origin\master, tetapi berkomitmen ke mastercabang lokal saya . Komit lokal ini sekarang harus didorong ke cabang lain.

Dengan Git Extensions Anda dapat melakukan sesuatu seperti ini:

  • (Buat jika tidak ada dan) checkout cabang baru, tempat Anda ingin mendorong komit Anda.
  • Pilih komit dari histori, yang harus dikomit & didorong ke cabang ini.
  • Klik kanan dan pilih Cherry pick commit .
  • Tekan tombol pilih Cherry sesudahnya.
  • Komit terpilih terpilih diterapkan ke cabang Anda yang sudah keluar. Sekarang komit dan dorong.
  • Periksa cabang lama Anda, dengan komit yang salah.
  • Hard reset cabang ini ke komit terakhir kedua, di mana semuanya baik-baik saja (perlu diketahui apa yang Anda lakukan di sini!). Anda dapat melakukannya melalui klik kanan pada komit terakhir kedua dan pilih Reset cabang saat ini ke sini . Konfirmasikan operasi, jika Anda tahu apa yang Anda lakukan.

Anda juga bisa melakukannya di baris perintah GIT . Contoh yang disalin dari David Christensen :

Saya pikir Anda akan menemukan git cherry-pick+ git resetmenjadi alur kerja yang jauh lebih cepat:

Menggunakan skenario Anda yang sama, dengan "fitur" sebagai cabang dengan komit terbanyak salah, akan lebih mudah untuk melakukan ini:

git checkout master
git cherry-pick feature
git checkout feature
git reset --hard HEAD^

Menghemat sedikit kerja, dan merupakan skenario yang git cherry-pick dirancang untuk menangani.

Saya juga akan mencatat bahwa ini akan bekerja juga jika itu bukan komit teratas; Anda hanya perlu komitmen untuk argumen untuk memilih, melalui:

git checkout master
git cherry-pick $sha1
git checkout feature
git rebase -i ... # whack the specific commit from the history

pengujian
sumber
2

Saya mendapat hasil yang buruk dengan git push origin branch1:branch2perintah:

Dalam kasus saya, branch2dihapus dan branch1telah diperbarui dengan beberapa perubahan baru.

Karenanya, jika Anda hanya menginginkan perubahan branch2dari branch1, coba prosedur di bawah ini:

  • Pada branch1:git add .
  • Pada branch1:git commit -m 'comments'
  • Pada branch1:git push origin branch1

  • Pada branch2:git pull origin branch1

  • Hidup branch1: kembali ke komit sebelumnya.

Benyamin Jafari
sumber
0

Anda dapat melakukan ini dengan mudah

git status
git add .
git commit -m "any commit"
git pull origin (branch name, master in my case)
git push origin current branch(master):branch 2(development)(in which you want to push changes)
Ramiz Khan
sumber
-1

git init 
#git remote remove origin
git remote add origin  <http://...git>
echo "This is for demo" >> README.md 
git add README.md
git commit -m "Initail Commit" 
git checkout -b branch1 
git branch --list
****add files***
git add -A
git status
git commit -m "Initial - branch1"
git push --set-upstream origin branch1
#git push origin --delete  branch1
#git branch --unset-upstream  

Srinu Mareti
sumber
1
Silakan tambahkan beberapa penjelasan kodenya.
Nakx
-4

Anda telah berkomitmen untuk BRANCH1 dan ingin menyingkirkan komitmen ini tanpa kehilangan perubahan? git reset adalah yang Anda butuhkan. Melakukan:

git branch BRANCH2

jika Anda ingin BRANCH2 menjadi cabang baru. Anda juga dapat menggabungkan ini di akhir dengan cabang lain jika Anda mau. Jika BRANCH2 sudah ada, maka tinggalkan langkah ini.

Lalu lakukan:

git reset --hard HEAD~3

jika Anda ingin mengatur ulang komit pada cabang yang telah Anda komit. Ini mengambil perubahan dari tiga komitmen terakhir.

Kemudian lakukan hal berikut untuk membawa komitmen yang dipindahkan ke BRANCH2

git checkout BRANCH2

Sumber ini bermanfaat: https://git-scm.com/docs/git-reset#git-reset-Undoacommitmakingitatopicbranch

Sasa
sumber