GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menyalin komit dari satu repo Git ke yang lain?

Saya memiliki masalah serupa di mana saya lupa melakukan fork repo ke github saya dan menambahkan beberapa komit sebelum saya menyadari kesalahan saya.

Saya menemukan solusi yang cukup sederhana.

Pertama-tama hapus remote ke repo asli

git remote remove origin

Kedua, tambahkan remote ke fork baru di github saya

git remote add origin <my repo URL>

Kemudian saya mendorong ke master asal dan semua komit saya muncul di github saya.


Apakah ada cara saya memasukkan komit ke repo baru (kali ini komit pertama adalah file LICENSE) dan masih menyimpan info meta komit?

Ya, dengan menambahkan jarak jauh dan memilih komit di atas komit pertama Anda.

# add the old repo as a remote repository 
git remote add oldrepo https://github.com/path/to/oldrepo

# get the old repo commits
git remote update

# examine the whole tree
git log --all --oneline --graph --decorate

# copy (cherry-pick) the commits from the old repo into your new local one
git cherry-pick sha-of-commit-one
git cherry-pick sha-of-commit-two
git cherry-pick sha-of-commit-three

# check your local repo is correct
git log

# send your new tree (repo state) to github
git push origin master

# remove the now-unneeded reference to oldrepo
git remote remove oldrepo

Sisa dari jawaban ini adalah jika Anda masih ingin menambahkan LISENSI ke repo Anda sebelumnya.

Ya. Anda dapat menempatkan komit LICENSE sebagai komit pertama dengan melakukan rebasing.

Rebasing adalah cara gits mengatur ulang urutan komit sambil mempertahankan semua pembuat komit dan tanggal komit tetap utuh.

Saat mengerjakan repo bersama, umumnya tidak disarankan kecuali seluruh tim Anda fasih. Bagi yang tidak, mereka dapat mengkloning salinan baru dari repositori.

Inilah cara Anda mendapatkan komit LICENSE sebagai komit pertama.

1. Perbarui dan rebase salinan lokal Anda

Lihat proyek Anda dan tempatkan file LICENSE dalam komit DI ATAS dari 3 tumpukan komit Anda saat ini.

#create LICENSE file, edit, add content, save
git add LICENSE
git commit -m 'Initial commit'

Kemudian lakukan rebase interaktif pada cabang master untuk MENUTAR ULANG komit.

git rebase -i --root

Ini akan membuka editor. Pindahkan baris terbawah ("Komit awal" Anda, komit terbaru) ke bagian atas file. Kemudian simpan dan keluar dari editor.

Segera setelah Anda keluar dari editor, git akan menulis komit sesuai urutan yang baru saja Anda tentukan.

Anda sekarang memiliki salinan lokal dari repositori yang diperbarui. lakukan:

git log

untuk memverifikasi.

2. Dorong paksa status repo baru Anda ke github

Sekarang setelah salinan Anda diperbarui, Anda harus mendorongnya secara paksa ke github.

git push -f origin master

Ini akan memberi tahu github untuk memindahkan cabang master ke lokasi barunya. Anda hanya boleh memaksa push pada kesempatan langka seperti ini di mana semua orang yang bekerja dengannya mengetahui perubahan yang tertunda, jika tidak maka akan membingungkan kolaborator Anda.

3. Sinkronkan kolaborator ke github

Terakhir, semua kolaborator harus melakukan sinkronisasi ke repositori ini.

Pertama mereka harus memiliki repositori yang bersih karena perintah berikut dapat merusak jika ada perubahan yang belum disimpan.

# make sure there are no unsaved changes
git status 

# pull the latest version from github
git fetch  

# move their master branch pointer to the one you published to github.
git reset --hard origin/master

Itu dia. Semua orang harus sinkron sekarang.


Linux
  1. Cara Menemukan dan Menyalin Jenis File Tertentu Dari Satu Direktori Ke Direktori Lain Di Linux

  2. Bagaimana Cara Menyalin Pengaturan Dari Satu Mesin Ke Mesin Lainnya?

  3. Salin N-baris Terakhir Dari Satu File Ke File Lain?

  1. Bagaimana Melewati Output Dari Satu Perintah Sebagai Argumen ke Yang Lain?

  2. Salin struktur folder (tanpa file) dari satu lokasi ke lokasi lain

  3. Bagaimana cara menyalin 10 file terbaru teratas dari satu direktori ke direktori lain?

  1. Bagaimana cara mengganti nama banyak file dari satu ekstensi ke ekstensi lainnya di Linux / Unix?

  2. Bagaimana menemukan kata-kata dari satu file di file lain?

  3. Salin seluruh hierarki sistem file dari satu drive ke drive lainnya