Ambil semua perubahan saya pada cabang saat ini dan pindahkan ke cabang baru di Git

105

Saya mulai mengerjakan apa yang menurut saya akan menjadi perbaikan bug minor di cabang master saya. Namun, itu telah berputar di luar kendali ke titik di mana saya berharap saya telah membuat cabang terpisah untuk melakukan pengembangan di tempat pertama.

Jadi sekarang yang ingin saya lakukan adalah:

  1. Buat cabang baru bernama (katakanlah) "edge"
  2. Pindahkan semua file yang diubah / tidak terlacak pada master ke edge (seperti master tidak berubah dari saat saya memulai perbaikan bug)
  3. Selesaikan pekerjaan saya di tepi, bergabung kembali menjadi master

Bagaimana saya bisa melakukan ini?

Tom Lehman
sumber

Jawaban:

103

Jika Anda belum melakukan apa pun, Anda sudah berada di posisi yang tepat.

  1. Buat cabang baru: git checkout -b edge
  2. File Anda belum berubah. Hanya git addapa yang perlu dilakukan dan dilakukan seperti biasa.
  3. Setelah Anda selesai melakukan edge, alihkan kembali ke masterdengan git checkoutdan git merge edge.
JB.
sumber
Belum melakukan apa-apa, jadi baris pertama itu pemandangan yang menyenangkan ... Fiuh, itu sebenarnya tidak menyakitkan :-)
Drenai
87

Untuk menambah jawaban JB, jika Anda sudah mulai membuat beberapa komitmen pada master untuk apa yang akhirnya menjadi upaya "tepi", Anda dapat:

git stash
git checkout -b edge master
git branch -f master SHA1_before_your_commits
git stash apply
VonC
sumber
bungkus simpanan tidak sepenuhnya diperlukan, tetapi hanya untuk perubahan kerja yang tidak terikat, bukan?
HaveAGuess
4
@HaveAG benar. Dengan "ambil semua perubahan saya", saya juga menyertakan perubahan saat ini yang belum ditambahkan. Oleh karena itu simpanan.
VonC
Tidak bisakah baris kedua dan ketiga diciutkan menjadi "git checkout -b edge master"?
Paul Lynch
@PaulLynch mempertimbangkan mereka komit (atas master) yang harus di edge berada di master, ya. Saya telah mengedit jawabannya.
VonC
Saya tidak melihat bagaimana git stashberguna di sini, karena menggunakan git checkout -btidak mengubah pohon kerja sama sekali ...
user1686
13

Jika Anda mencoba memindahkan pekerjaan dari master ke cabang yang sudah ada, tetapi berada di belakang master, git tidak akan membiarkan Anda beralih ke cabang lain. Dalam kasus ini, lakukan ini:

git stash
git checkout oldBranch
git merge master
git checkout master
git stash apply
git checkout oldBranch
Jesse P.
sumber