Jika saya memiliki n komit, bagaimana saya bisa bercabang dari komit n-3?
Saya bisa melihat hash dari setiap commit.
Jika saya memiliki n komit, bagaimana saya bisa bercabang dari komit n-3?
Saya bisa melihat hash dari setiap commit.
Jawaban:
Anda dapat membuat cabang melalui hash:
git branch branchname <sha1-of-commit>
Atau dengan menggunakan referensi simbolis:
git branch branchname HEAD~3
Untuk checkout cabang saat membuatnya, gunakan
git checkout -b branchname <sha1-of-commit or HEAD~3>
git push origin BRANCH_NAME
<sha1-of-commit>
jalankan git checkout -b <name-of-branch> <sha1-of-commit>
tetapi jika cabang sudah adagit checkout -B <name-of-branch> <sha1-of-commit>
Untuk melakukannya di github.com:
Keajaiban dapat dilakukan dengan git reset .
Buat cabang baru dan alihkan ke sana (jadi semua komit terbaru Anda disimpan di sini)
git checkout -b your_new_branch
Beralih kembali ke cabang kerja sebelumnya (anggap masternya)
git checkout master
Hapus komit x terbaru, tetap bersihkan master
git reset --hard HEAD~x # in your case, x = 3
Mulai saat ini, semua x commit terakhir hanya ada di cabang baru, bukan di cabang kerja Anda sebelumnya (master).
git reset --hard
bukan ide yang baik jika Anda sudah mendorong komit ke asal ...
git push --force
jika Anda sudah mendorong cabang sebelumnya
Jika Anda tidak yakin komit mana yang ingin Anda cabut sebelumnya, Anda dapat memeriksa komit dan memeriksa kodenya (lihat sumber, kompilasi, uji) dengan
git checkout <sha1-of-commit>
setelah Anda menemukan komit yang ingin Anda cabut dari Anda dapat melakukannya dari dalam komit (yaitu tanpa kembali ke master terlebih dahulu) hanya dengan membuat cabang dengan cara biasa:
git checkout -b <branch_name>
git checkout -b <branch-name> <sha1-of-commit>
git branch branchname <sha1-of-commit>
" (dari jawaban yang diterima)?
git checkout -b
untuk membuat cabang baru.
Cara cepat untuk melakukannya di repo Github Anda adalah sebagai berikut:
Cukup jalankan:
git checkout -b branch-name <commit>
Sebagai contoh :
git checkout -b import/january-2019 1d0fa4fa9ea961182114b63976482e634a8067b8
The checkout
perintah dengan parameter -b
akan membuat cabang baru dan itu akan beralih Anda ke itu
git fetch
& git branch
perintah pada folder proyek Anda menggunakan terminal, kemudian periksa apakah cabang fitur ada, jika ini adalah kasus maka ya, tentu saja Anda tidak dapat membuat cabang dari cabang yang dihapus, Anda juga bisa mengembalikan penghapusan cabang jika cabang hilang
Pertanyaan terkait yang bagus adalah: Bagaimana cara Anda mengetahuinya menggunakan --help
opsi git? Mari kita coba ini:
git branch --help
Kami melihat output ini:
NAME
git-branch - List, create, or delete branches
SYNOPSIS
git branch [--color[=<when>] | --no-color] [-r | -a]
[--list] [-v [--abbrev=<length> | --no-abbrev]]
[--column[=<options>] | --no-column]
[(--merged | --no-merged | --contains) [<commit>]] [--sort=<key>]
[--points-at <object>] [<pattern>...]
git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
git branch (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
git branch --unset-upstream [<branchname>]
git branch (-m | -M) [<oldbranch>] <newbranch>
git branch (-d | -D) [-r] <branchname>...
git branch --edit-description [<branchname>]
Gobbledegook.
Cari melalui teks berikutnya untuk kata "komit". Kami menemukan ini:
<start-point>
The new branch head will point to this commit. It may be given as a branch name, a
commit-id, or a tag. If this option is omitted, the current HEAD will be used instead.
Kami pergi ke suatu tempat!
Sekarang, fokuslah pada baris buku pegangan ini:
git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
Padatkan itu menjadi ini:
git branch <branchname> [<start-point>]
Dan selesai.
Untuk melakukan ini di Eclipse:
Ini akan membuat cabang lokal untuk Anda. Kemudian setiap kali Anda mendorong perubahan, cabang Anda akan didorong ke server jarak jauh.
Anda dapat melakukannya di Stash.
Saya bisa melakukannya seperti ini:
git branch new_branch_name `git log -n 1 --skip 3 --format=%H`
Di mana Anda harus memasukkan nilai lewati. 0 adalah yang terbaru, 1 adalah yang sebelumnya, 2 adalah komit sebelum itu, dll.
HEAD~1
(di mana 1 menentukan 1 komit kembali)?
Ini menciptakan cabang dengan satu perintah:
git push origin <sha1-of-commit>:refs/heads/<branch-name>
Saya lebih suka cara ini lebih baik daripada yang diterbitkan di atas, karena itu membuat cabang segera (tidak memerlukan perintah push tambahan setelah itu).
Menggunakan Sourcetree | Cara termudah.
Inilah yang saya lakukan:
C:\Users\[path]\build>git checkout -b responsivenavigation 8a75b001096536b3216022484af3026aa9c7bb5b
Switched to a new branch 'responsivenavigation'
C:\Users\jaimemontoya\Dropbox\CuponClub\androidapp\build>git branch
master
* responsivenavigation
Dalam hal ini, 8a75b001096536b3216022484af3026aa9c7bb5b
adalah dan komit lama milik master
cabang.
Pergi ke komit tertentu dari repositori git
Kadang-kadang ketika mengerjakan repositori git Anda ingin kembali ke komit (revisi) tertentu untuk mengambil snapshot proyek Anda pada waktu tertentu. Untuk melakukan itu semua yang Anda butuhkan, SHA-1 hash dari commit yang Anda dapat dengan mudah menemukan memeriksa log dengan perintah:
git log --abbrev-commit --pretty=oneline
yang akan memberi Anda daftar ringkas semua komitmen dan versi singkat dari hash SHA-1.
Sekarang Anda tahu hash dari commit yang ingin Anda tuju, Anda dapat menggunakan salah satu dari 2 perintah berikut:
git checkout HASH
atau
git reset --hard HASH
Periksa
git checkout <commit> <paths>
Memberitahu git untuk mengganti status lintasan saat ini dengan statusnya di komit yang diberikan. Path dapat berupa file atau direktori.
Jika tidak ada cabang yang diberikan, git mengasumsikan commit HEAD.
git checkout <path> // restores path from your last commit. It is a 'filesystem-undo'.
Jika tidak ada jalur yang diberikan, git bergerak HEAD
ke komit yang diberikan (sehingga mengubah komit yang Anda duduki dan kerjakan).
git checkout branch //means switching branches.
atur ulang
git reset <commit> //re-sets the current pointer to the given commit.
Jika Anda berada di cabang (biasanya Anda seharusnya), HEAD
dan cabang ini dipindahkan untuk melakukan.
Jika Anda dalam HEAD
kondisi terpisah , git reset hanya bergerak HEAD
. Untuk mengatur ulang cabang, periksa dulu.
Jika Anda ingin tahu lebih banyak tentang perbedaan antara git reset dan checkout git saya akan merekomendasikan untuk membaca blog git resmi .
git log --abbrev-commit --pretty=oneline
dapat disingkatgit log --oneline
Untuk pengguna Git GUI Anda dapat memvisualisasikan semua riwayat (jika perlu) dan kemudian klik kanan pada komit yang ingin Anda cabut dari dan masukkan nama cabang.
Untuk melakukan jawaban yang diterima di Visual Studio 2015 & 2017:
Klik perubahan (panah merah di atas)
Klik pada Tindakan (panah merah di atas) dan klik di Lihat Riwayat di Menu DropDown
Dan Tab baru akan terbuka:
Dan Anda harus mengklik kanan komit sebelumnya yang ingin Anda kembalikan ke:
Pilih untuk checkout cabang baru dan voila!
Di bawah, meskipun bukan bagian dari pertanyaan OP, tetapi saya sering melakukan keduanya dan ini adalah langkah jebakan, setidaknya bagi saya: jika Anda ingin kembali ke komit sebelumnya, tanpa checkout cabang baru, JANGAN memilih kembalikan (! ?); Anda harus memilih redefine --mixed atau --hard:
jika Anda menggunakan pohon sumber yang cukup lurus ke depan.
Jika Anda mencari solusi berbasis baris perintah, Anda dapat mengabaikan jawaban saya. Saya akan menyarankan Anda untuk menggunakan GitKraken . Ini adalah klien UI git yang luar biasa. Ini menunjukkan pohon Git di beranda. Anda bisa melihat mereka dan tahu apa yang sedang terjadi dengan proyek tersebut. Cukup pilih komit tertentu, klik kanan padanya dan pilih opsi 'Buat cabang di sini'. Ini akan memberi Anda kotak teks untuk memasukkan nama cabang. Masukkan nama cabang, pilih 'OK' dan Anda ditetapkan. Ini benar-benar sangat mudah digunakan.