GNU/Linux >> Znalost Linux >  >> Linux

Jak zkopírovat commity z jednoho repozitáře Git do druhého?

Měl jsem podobný problém, kdy jsem zapomněl forkovat repo na můj github a přidal několik commitů, než jsem si uvědomil svou chybu.

Našel jsem docela jednoduché řešení.

Nejprve odeberte dálkový ovladač do původního úložiště

git remote remove origin

Za druhé přidejte dálkové ovládání do nové vidlice na mém github

git remote add origin <my repo URL>

Pak jsem zatlačil na origin master a všechny mé commity se objevily na mém githubu.


Existuje způsob, jak dostat odevzdání do nového úložiště (tentokrát je prvním odevzdáním soubor LICENCE) a přesto zachovat meta informace o odevzdání?

Ano, přidáním dálkového ovladače a výběrem třešní k prvnímu odevzdání.

# 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

Zbytek této odpovědi je, zda stále chcete přidat LICENCE do svého předchozího úložiště.

Ano. Svůj závazek LICENSE můžete umístit jako první potvrzení změnou základu.

Rebasing je gitův způsob, jak přeskupit pořadí odevzdání při zachování všech autorů odevzdání a dat odevzdání beze změny.

Při práci na sdíleném úložišti se obecně nedoporučuje, pokud celý váš tým neovládá git. Pro ty, kteří nejsou, mohou jednoduše naklonovat novou kopii úložiště.

Zde je návod, jak získáte svůj LICENČNÍ odevzdání jako první odevzdání.

1. Aktualizujte a znovu založte místní kopii

Podívejte se na svůj projekt a umístěte soubor LICENSE do odevzdání NAHORU vašeho aktuálního zásobníku 3 odevzdání.

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

Poté proveďte interaktivní rebase na hlavní větvi na REARRANGE závazky.

git rebase -i --root

Otevře se editor. Přesuňte spodní řádek (vaše "počáteční odevzdání", nejnovější odevzdání) na začátek souboru. Poté uložte a ukončete editor.

Jakmile editor opustíte, git zapíše odevzdání v pořadí, které jste právě určili.

Nyní máte aktualizovanou místní kopii úložiště. udělat:

git log

ověřit.

2. Vynutit odeslání vašeho nového stavu úložiště na github

Nyní, když je vaše kopie aktualizována, musíte vynutit její odeslání na github.

git push -f origin master

Toto řekne githubu, aby přesunul hlavní větev na své nové umístění. Push byste měli vynutit pouze ve výjimečných případech, jako je tato, kdy si každý, kdo s ním pracuje, uvědomuje čekající změnu, jinak to zmást vaše spolupracovníky.

3. Synchronizujte spolupracovníky s github

Nakonec se všichni spolupracovníci budou muset synchronizovat s tímto úložištěm.

Nejprve musí mít čistá úložiště protože následující příkaz může být destruktivní, pokud existují neuložené změny.

# 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

A je to. Všichni by nyní měli být synchronizováni.


Linux
  1. Jak najít a zkopírovat určitý typ souborů z jednoho adresáře do druhého v Linuxu

  2. Jak kopírovat nebo klonovat oprávnění z jednoho souboru do druhého v systému Linux

  3. Jak přesunout všechny soubory (včetně skrytých) z jednoho adresáře do druhého?

  1. Jak zkopírovat nastavení z jednoho počítače do druhého?

  2. Kopírovat posledních N řádků z jednoho souboru do druhého?

  3. Naučte se kopírovat soubory a složky z/na jiný server

  1. Zkopírujte strukturu složek (bez souborů) z jednoho umístění do druhého

  2. Jak přejmenovat více souborů z jedné přípony na druhou v Linuxu / Unixu?

  3. Jak najít slova z jednoho souboru v jiném souboru?