Git deposunu ├Ânceki bir i┼čleme nas─▒l geri d├Ând├╝r├╝r├╝m?


Al─▒nan cevaba git


Mevcut durumumdan belirli bir taahh├╝de g├Âre yap─▒lan anl─▒k g├Âr├╝nt├╝ye nas─▒l geri d├Ânerim?

Ben yaparsan─▒z git log , o zaman ben ┼ču ├ž─▒kt─▒y─▒ al─▒yorum:

 $ git log
commit a867b4af366350be2e7c21b8de9cc6504678a61b`
Author: Me <[email protected]>
Date:   Thu Nov 4 18:59:41 2010 -0400

blah blah blah...

commit 25eee4caef46ae64aa08e8ab3f988bc917ee1ce4
Author: Me <[email protected]>
Date:   Thu Nov 4 05:13:39 2010 -0400

more blah blah blah...

commit 0766c053c0ea2035e90f504928f8df3c9363b8bd
Author: Me <[email protected]>
Date:   Thu Nov 4 00:55:06 2010 -0400

And yet more blah blah...

commit 0d1d7fc32e5a947fbd92ee598033d85bfc445a50
Author: Me <[email protected]>
Date:   Wed Nov 3 23:56:08 2010 -0400

Yep, more blah blah.
 

3 Kas─▒mÔÇÖdaki taahh├╝de nas─▒l geri d├Ân├╝l├╝r, yani taahh├╝t 0d1d7fc ?


7177









Cevap say─▒s─▒n─▒ say: 30






Bu, "geri d├Ând├╝rme" ile ne demek istedi─čine ├žok ba─čl─▒d─▒r.

Ge├žici olarak farkl─▒ bir i┼čleme ge├žme

Ge├žici olarak ona geri d├Ânmek, etrafta dola┼čmak, sonra bulundu─čunuz yere geri d├Ânmek istiyorsan─▒z, tek yapman─▒z gereken, istenen taahh├╝d├╝ kontrol etmek:

 # This will detach your HEAD, that is, leave you with no branch checked out:
git checkout 0d1d7fc32
 

Ya da oradayken taahh├╝tte bulunmak istiyorsan─▒z, devam edin ve oradayken yeni bir ┼čube a├ž─▒n:

 git checkout -b old-state 0d1d7fc32
 

Bulundu─čunuz yere geri d├Ânmek i├žin, bulundu─čunuz ┼čubeye bir g├Âz at─▒n. (De─či┼čiklikler yapt─▒ysan─▒z, ┼čubeleri de─či┼čtirirken her zaman oldu─ču gibi, onlarla uygun ┼čekilde ba┼ča ├ž─▒kman─▒z gerekir. Onlar─▒ atmak i├žin s─▒f─▒rlayabilirsiniz; orada bir dal istiyorsan─▒z onlar─▒ bir dala.)

Yay─▒nlanmayan taahh├╝tleri sert silme

├ľte yandan, o zamandan beri yapt─▒─č─▒n─▒z her ┼čeyden ger├žekten kurtulmak istiyorsan─▒z, iki olas─▒l─▒k var. Biri, bu taahh├╝tlerin hi├žbirini yay─▒nlamad─▒ysan─▒z, sadece s─▒f─▒rlay─▒n:

 # This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32

# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts, if you've modified things which were
# changed since the commit you reset to.
 

S─▒k─▒┼č─▒rsan─▒z, yerel de─či┼čikliklerinizi zaten atm─▒┼čs─▒n─▒zd─▒r, ancak en az─▒ndan tekrar s─▒f─▒rlayarak daha ├Ânce bulundu─čunuz yere geri d├Ânebilirsiniz.

Yay─▒nlanan taahh├╝tleri geri al ile yeni taahh├╝tler

├ľte yandan, ├žal─▒┼čmay─▒ yay─▒nlad─▒ysan─▒z, b├╝y├╝k olas─▒l─▒kla ge├žmi┼či yeniden yazd─▒─č─▒ i├žin muhtemelen ┼čubeyi s─▒f─▒rlamak istemezsiniz. Bu durumda, ger├žekten taahh├╝tleri geri alabilirsin. Git ile geri alma i┼čleminin ├žok ├Âzel bir anlam─▒ vard─▒r: iptal etmek i├žin ters d├╝zeltme eki ile bir taahh├╝t olu┼čturun. Bu ┼čekilde hi├žbir tarihi yeniden yazmazs─▒n─▒z.

 # This will create three separate revert commits:
git revert a867b4af 25eee4ca 0766c053

# It also takes ranges. This will revert the last two commits:
git revert HEAD~2..HEAD

#Similarly, you can revert a range of commits using commit hashes:
git revert a867b4af..0766c053 

# Reverting a merge commit
git revert -m 1 <merge_commit_sha>

# To get just one, you could use `rebase -i` to squash them afterwards
# Or, you could do it manually (be sure to do this at top level of the repo)
# get your index and work tree into the desired state, without changing HEAD:
git checkout 0d1d7fc32 .

# Then commit. Be sure and write a good message describing what you just did
git commit
 

git-revert Manpage asl─▒nda a├ž─▒klamas─▒nda bu ├žok kapsar. Bir ba┼čka faydal─▒ link ise git-cm.com b├Âl├╝m├╝n├╝ git-revert'i tart─▒┼čmakt─▒r .

Sonu├žta geri d├Ânmek istemedi─činize karar verirseniz, geri d├Ânme (burada a├ž─▒kland─▒─č─▒ gibi) geri d├Ânebilir veya geri d├Ânmeden ├Ânceki durumuna d├Ânebilirsiniz (├Ânceki b├Âl├╝me bak─▒n).

Bu durumda bu cevab─▒ da yararl─▒ bulabilirsiniz:
HEAD bir ├Ânceki konuma nas─▒l ta┼č─▒n─▒r? (M├╝stakil kafa)


9101







Burada ├žok say─▒da karma┼č─▒k ve tehlikeli cevap var, ama asl─▒nda ├žok kolay:

 git revert --no-commit 0766c053..HEAD
git commit
 

Bu, HEAD'den geri d├Ân├╝┼č karma┼čas─▒na kadar olan her ┼čeyi geri d├Ând├╝recek, yani ├žal─▒┼čma a─čac─▒ndaki o taahh├╝t durumunu geri ├žekilmi┼č gibi yap─▒lan her bir taahh├╝t gibi yeniden yaratacak . Daha sonra mevcut a─čac─▒ kabul edersiniz ve esasen ÔÇťgeri d├Ând├╝─č├╝n├╝zeÔÇŁ ba─čl─▒ olarak e┼čde─čer yeni bir taahh├╝t olu┼čturur.

( --no-commit Bayrak git, t├╝m taahh├╝tleri bir kerede geri almas─▒na izin verir - aksi halde aral─▒ktaki her bir i┼člem i├žin bir mesaj girmeniz istenir, b├Âylece ge├žmi┼činizi gereksiz yeni taahh├╝tler ile kar─▒┼čt─▒r─▒rs─▒n─▒z.)

Bu, ├Ânceki durumuna geri d├Ânmenin g├╝venli ve kolay bir yoludur . Hi├žbir tarih yok edilmedi, bu y├╝zden zaten kamuya a├ž─▒klanm─▒┼č olan taahh├╝tler i├žin kullan─▒labilir.


1577







Rogue Coder?

Kendi ba┼č─▒na ├žal─▒┼čmak ve sadece ├žal─▒┼čmas─▒n─▒ m─▒ istiyorsunuz? A┼ča─č─▒daki talimatlar─▒ izleyin, benim i├žin ve di─čerleri i├žin y─▒llarca g├╝venilir bir ┼čekilde ├žal─▒┼čt─▒lar.

Ba┼čkalar─▒yla ├žal─▒┼čmak? Git karma┼č─▒k. D├Âk├╝nt├╝ bir ┼čey yapmadan ├Ânce bu cevab─▒n alt─▒ndaki yorumlar─▒ okuyun.

├çal─▒┼čan Kopyay─▒ En Son Taahh├╝d├╝ne Geri D├Ânme

├ľnceki bir i┼čleme geri d├Ânmek, de─či┼čiklikleri dikkate almamak:

 git reset --hard HEAD
 

HEAD ┼ču anki ┼čubenizdeki son i┼člem nedir?

├çal─▒┼čma Kopyas─▒n─▒ Eski Taahh├╝d├╝ne Geri Alma

En son taahh├╝tten daha eski olan bir taahh├╝de geri d├Ânmek i├žin:

 # Resets index to former commit; replace '56e05fced' with your commit code
git reset 56e05fced 

# Moves pointer back to previous HEAD
git reset --soft [email protected]{1}

git commit -m "Revert to 56e05fced"

# Updates working copy to reflect the new commit
git reset --hard
 

Krediler benzer bir Y─▒─č─▒n Ta┼čmas─▒ sorusuna gider, SHA'n─▒n Git'teki bir taahh├╝d├╝ne geri d├Ân├╝ls├╝n m├╝? .


1522







Benim ve muhtemelen di─čerleri i├žin en iyi se├ženek Git s─▒f─▒rlama se├žene─čidir:

 git reset --hard <commidId> && git clean -f
 

Bu benim i├žin en iyi se├ženek oldu! Basit, h─▒zl─▒ ve etkili!


Not: ┼×ubenizi, eski taahh├╝tlerin kopyalar─▒ olan di─čer ki┼čilerle payla┼č─▒yorsan─▒z, yorumlarda belirtildi─či gibi yapmay─▒n.

Ayr─▒ca yorumlarda, daha az 'ballzy' y├Ântemi kullanmak isterseniz kullanabilirsiniz.

git clean -i


193







Cevaplamadan ├Ânce, bunun ne HEAD oldu─čunu a├ž─▒klayan baz─▒ arka plan ekleyelim .

First of all what is HEAD?

HEAD bu, yaln─▒zca ge├žerli daldaki ge├žerli i┼čleme (en son) referanst─▒r. HEAD Herhangi bir zamanda yaln─▒zca bir tane olabilir (hari├ž git worktree ).

─░├žeri─či i├žinde HEAD saklan─▒r .git/HEAD ve mevcut taahh├╝d├╝n 40 bayt SHA-1'ini i├žerir.


detached HEAD

En son HEAD s├Âzde de─čilseniz - tarihte ├Ânceki bir sonuca i┼čaret eden anlama gelir detached HEAD .


Resim tan─▒m─▒n─▒ buraya girin

Komut sat─▒r─▒nda ┼čunun gibi g├Âr├╝necektir - HEAD ge├žerli dal─▒n ucuna i┼čaret etmedi─činden dal ad─▒ yerine SHA-1 :


Resim tan─▒m─▒n─▒ buraya girin


Ayr─▒lm─▒┼č bir HEAD'den nas─▒l kurtar─▒laca─č─▒na dair birka├ž se├ženek:


git checkout

 git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back
 

Bu, istenen ┼čubeye i┼čaret eden yeni ┼čubeyi teslim alacakt─▒r. Bu komut belirli bir taahh├╝tte bulunacakt─▒r.

Bu noktada bir ┼čube olu┼čturabilir ve bu noktadan itibaren ├žal─▒┼čmaya ba┼člayabilirsiniz:

 # Checkout a given commit.
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
# in order to be able to update the code.
git checkout <commit-id>

# Create a new branch forked to the given commit
git checkout -b <branch name>
 

git reflog

Her zaman da kullanabilirsiniz reflog . git reflog g├╝ncellenen herhangi bir de─či┼čiklik g├Âsterecek HEAD ve istenen reflog giri┼čini kontrol HEAD etmek bu i┼čleme geri d├Ânecektir.

HEAD her de─či┼čtirili┼činde yeni bir giri┼č olacakt─▒r. reflog

 git reflog
git checkout [email protected]{...}
 

Bu sizi istenen taahh├╝d├╝n├╝ze geri d├Ând├╝r├╝r


Resim tan─▒m─▒n─▒ buraya girin


git reset HEAD --hard <commit_id>

Ba┼č─▒n─▒z─▒ tekrar istenen g├Âreve getirin.

 # This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32

# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts, if you've modified things which were
# changed since the commit you reset to.
 

Bu ┼čema hangi komutun ne yapt─▒─č─▒n─▒ g├Âsterir. G├Ârd├╝─č├╝n├╝z gibi orada reset && checkout de─či┼čtirin HEAD .


Resim tan─▒m─▒n─▒ buraya girin


155







E─čer "uncommit" yapmak, son i┼člem mesaj─▒n─▒ silmek ve de─či┼čtirilen dosyalar─▒ tekrar yerle┼čtirmeye koymak istiyorsan─▒z, ┼ču komutu kullan─▒rs─▒n─▒z:

 git reset --soft HEAD~1
 
  • --soft Taahh├╝t edilmeyen dosyalar─▒n, --hard kendisine at─▒lacak olan ├žal─▒┼čma dosyalar─▒ olarak saklanmas─▒ gerekti─čini belirtir .
  • HEAD~1 son taahh├╝tt├╝r. Geri almak istiyorsan─▒z 3 taahh├╝tte bulunabilirsiniz HEAD~3 . Belirli bir revizyon numaras─▒na geri d├Ânmek istiyorsan─▒z, bunu SHA karma de─čerini kullanarak da yapabilirsiniz.

Bu, yanl─▒┼č ┼čeyi yapt─▒─č─▒n─▒z ve son s├Âz├╝n├╝ geri almak istedi─činiz durumlarda son derece yararl─▒ bir komuttur.

Kaynak: http://nakkaya.com/2009/09/24/git-delete-last-commit/


132







Git'teki yerel de─či┼čiklikleri geri alman─▒n bir├žok yolunu denedim ve en son taahh├╝t durumuna geri d├Ânmek istiyorsan─▒z, bunun en iyi ┼čekilde ├žal─▒┼čt─▒─č─▒n─▒ g├Âsteriyor.

 git add . && git checkout master -f
 

K─▒sa A├ž─▒klama:

  • Hi├žbir taahh├╝tte git revert bulunmayacakt─▒r.
  • HEAD'inizi oldu─ču gibi git checkout <commithashcode> s├Âkmeyecektir.
  • T├╝m yerel de─či┼čikliklerinizi ge├žersiz k─▒lar ve daldaki son i┼člemden bu yana eklenen t├╝m dosyalar─▒ S─░LECEKT─░R.
  • Sadece ┼čubelerin isimleriyle ├žal─▒┼č─▒r, b├Âylece ┼čubedeki en son i┼člere geri d├Ânebilirsiniz.

Yukar─▒daki sonu├žlar─▒ elde etmenin ├žok daha kolay ve basit bir yolunu buldum:

 git add . && git reset --hard HEAD
 

HEAD'in en yeni noktaya i┼čaret etti─či yer ┼ču anki ┼čubenize ba─čl─▒.

Bu, boulder_ruby'nin ├Ânerdi─či kod kodunun ayn─▒s─▒d─▒r, ancak son i┼člemden bu yana olu┼čturulan t├╝m yeni dosyalar─▒ silmek i├žin daha git add . ├Ânce ekledim git reset --hard HEAD ;


107







Bunu a┼ča─č─▒daki iki komutla yapabilirsiniz:

 git reset --hard [previous Commit SHA id here]
git push origin [branch Name] -f
 

├ľnceki Git taahh├╝d├╝n├╝z├╝ kald─▒racak.

De─či┼čikliklerinizi korumak istiyorsan─▒z, ┼čunlar─▒ da kullanabilirsiniz:

 git reset --soft [previous Commit SHA id here]
 

O zaman de─či┼čikliklerinizi kurtaracak.


107







Tamam, git ├Ânceki i┼čine geri d├Ânmek olduk├ža kolay ...

De─či┼čiklikleri yapmadan geri d├Ân├╝n :

 git reset --hard <commit>
 

De─či┼čiklikleri koruyarak geri d├Ân├╝n :

 git reset --soft <commit>
 

A├ž─▒kla: git reset kullanarak, belirli bir duruma s─▒f─▒rlayabilirsiniz, yukar─▒da g├Ârd├╝─č├╝n├╝z gibi kesin bir karma i┼člemle kullanmak yayg─▒nd─▒r.

Ancak fark─▒ g├Ârd├╝─č├╝n├╝z gibi iki bayrak kullan─▒yor --soft ve --hard varsay─▒lan olarak bayrak git reset kullanarak --soft , ancak her zaman bayrak kullanarak iyi bir uygulama, her bayra─č─▒ a├ž─▒kl─▒yorum:


--yumu┼čak

A├ž─▒klanmas─▒ gerekti─či gibi, varsay─▒lan bayrak, ├žal─▒┼čma a─čac─▒n─▒ de─či┼čtirmez, ancak i┼člem yapmaya haz─▒r t├╝m de─či┼čiklik dosyalar─▒n─▒ ekler, b├Âylece dosyalarda yap─▒lan de─či┼čikliklerin etiketlenmemi┼č oldu─ču i┼člem durumuna geri d├Ânersiniz.


--zor

Bu bayra─ča dikkat edin, ├žal─▒┼čan a─čac─▒ s─▒f─▒rlar ve izlenen dosyalarda yap─▒lan t├╝m de─či┼čiklikler s─▒f─▒rlan─▒r.


Ayr─▒ca git ile ├žal─▒┼čan ger├žek bir ya┼čamda olabilecek a┼ča─č─▒daki imaj─▒ yaratt─▒m:


git bir taahh├╝de s─▒f─▒rlama


70







Efendi ve o ilgili ┼čube hakk─▒nda konu┼čtu─čunuzu varsayal─▒m (bu, ilgilendi─činiz herhangi bir ├žal─▒┼čma dal─▒ olabilir):

 # Reset local master branch to November 3rd commit ID
git reset --hard 0d1d7fc32e5a947fbd92ee598033d85bfc445a50

# Reset remote master branch to November 3rd commit ID
git push -f origin 0d1d7fc32e5a947fbd92ee598033d85bfc445a50:master
 

Cevab─▒n─▒ bir blog g├Ânderisinde buldum (art─▒k yok)

Bunun, uzaktan kumandadaki De─či┼čikli─či S─▒f─▒rlama ve Zorlama oldu─čunu unutmay─▒n; b├Âylece tak─▒m─▒n─▒zdaki di─čer ki┼čiler zaten giderse, onlar i├žin sorunlara yol a├žacaks─▒n─▒z. De─či┼čim tarihini mahvediyorsunuz, bu da insanlar─▒n gitmeyi ilk etapta kullanmas─▒n─▒n ├Ânemli bir nedeni.

Geri d├Ând├╝rme kullanmak (di─čer cevaplara bak─▒n) s─▒f─▒rlamaktan iyidir. Tek ki┼čilik bir tak─▒msan─▒z, o zaman ├Ânemli de─čil.


65







Buradaki birle┼čimden ba┼čka hi├žbir ┼čey benim i├žin i┼če yaramad─▒:

 git reset --hard <commit_hash>
git push origin <branch_name> --force
 

Buradaki anahtar zorlamad─▒r, fazladan taahh├╝t / mesaj g├Ânderme vs.


62







Adl─▒ bir metin dosyas─▒na a┼ča─č─▒daki kaydedilmesini oldu─čunu varsayal─▒m ~/commits-to-revert.txt (kulland─▒─č─▒m git log --pretty=oneline onlar─▒ almak i├žin)

 fe60adeba6436ed8f4cc5f5c0b20df7ac9d93219
0c27ecfdab3cbb08a448659aa61764ad80533a1b
f85007f35a23a7f29fa14b3b47c8b2ef3803d542
e9ec660ba9c06317888f901e3a5ad833d4963283
6a80768d44ccc2107ce410c4e28c7147b382cd8f
9cf6c21f5adfac3732c76c1194bbe6a330fb83e3
fff2336bf8690fbfb2b4890a96549dc58bf548a5
1f7082f3f52880cb49bc37c40531fc478823b4f5
e9b317d36a9d1db88bd34831a32de327244df36a
f6ea0e7208cf22fba17952fb162a01afb26de806
137a681351037a2204f088a8d8f0db6e1f9179ca
 

Her birini geri almak i├žin bir Bash kabuk beti─či olu┼čturun :

 #!/bin/bash
cd /path/to/working/copy
for i in `cat ~/commits-to-revert.txt`
do
    git revert $i --no-commit
done
 

Bu, dosya ve dizin olu┼čturma ve silme i┼člemleri de dahil olmak ├╝zere her ┼čeyi ├Ânceki durumuna d├Ând├╝r├╝r, ┼čubenize teslim eder ve ge├žmi┼či korursunuz, ancak ayn─▒ dosya yap─▒s─▒na geri d├Ând├╝rd├╝n├╝z. Git'in neden sahip olmad─▒─č─▒ git revert --to <hash> benden ├Âte.


57







Jefromi'nin ├ç├Âz├╝mlerine Ekstra Alternatifler

Jefromi'nin ├ž├Âz├╝mleri kesinlikle en iyileridir ve kesinlikle onlar─▒ kullanmal─▒s─▒n─▒z. Bununla birlikte, b├╝t├╝nl├╝k u─čruna, bir taahh├╝d├╝n geri al─▒nmas─▒nda da kullan─▒labilecek di─čer alternatif ├ž├Âz├╝mleri g├Âstermek istedim ( bir ├Ânceki taahh├╝tte oldu─ču gibi de─či┼čiklikleri geri alan yeni bir taahh├╝t yaratman─▒z anlam─▒nda git revert ).

A├ž─▒k├žas─▒, bu alternatifler taahh├╝tleri geri alman─▒n en iyi yolu de─čildir , Jefromi'nin ├ž├Âz├╝mleri ┼č├Âyledir , ama ayn─▒ ┼čeyi elde etmek i├žin bu di─čer y├Ântemleri de kullanabilece─činizi belirtmek isterim git revert .

Alternatif 1: Sert ve Yumu┼čak S─▒f─▒rlamalar

Bu, Charles Bailey'nin Git'teki bir SHA hash─▒n─▒n taahh├╝d├╝ne geri d├Ânme ├ž├Âz├╝m├╝n├╝n ├žok az de─či┼čtirilmi┼č bir s├╝r├╝m├╝d├╝r. :

 # Reset the index to the desired commit
git reset --hard <commit>

# Move the branch pointer back to the previous HEAD
git reset --soft [email protected]{1}

# Commit the changes
git commit -m "Revert to <commit>"
 

Bu, temel olarak, yumu┼čak s─▒f─▒rlamalar─▒n, daha sonra yapabilece─činiz indeks / evreleme alan─▒nda ├Ânceki i┼členme durumunu b─▒rakaca─č─▒ ger├že─čini kullanarak ├žal─▒┼č─▒r.

Alternatif 2: Ge├žerli A─čac─▒ Sil ve Yenisiyle De─či┼čtir

Bu ├ž├Âz├╝m svick'in Checkout eski taahh├╝d├╝ne verece─či ├ž├Âz├╝mden geliyor ve yeni bir taahh├╝t haline geldi :

 git rm -r .
git checkout <commit> .
git commit
 

Alternatif # 1'e benzer ┼čekilde, bu <commit> ge├žerli ├žal─▒┼čma kopyas─▒ndaki durumunu yeniden ├╝retir . ─░lk yap─▒lmas─▒ gereken, git rm ├ž├╝nk├╝ git checkout o zamandan beri eklenen dosyalar─▒ silmez <commit> .


56







─░┼čte ├Ânceki bir g├Âreve geri d├Ânmenin ├žok daha basit bir yolu (ve ne olursa olsun onunla yapmak i├žin, karars─▒z bir durumda olmas─▒n─▒ sa─člay─▒n):

 git reset HEAD~1
 

Yani, iddaa iddaa gerek yok ve benzeri :)


52







├ľzellikle eski taahh├╝tleri geri almak ve yerle┼čtirmek i├žin bir komut (Git'in ├žekirde─činin bir par├žas─▒ de─čil ama git-extras paketinde bulunur):

 git back
 

Man sayfa ba┼č─▒na, ayn─▒ zamanda kullan─▒labilir:

 # Remove the latest three commits
git back 3
 

36







T├╝m de─či┼čikliklerden sonra, bu komutlar─▒n t├╝m├╝ne bast─▒─č─▒n─▒zda, ┼čunlar─▒ kullanman─▒z gerekebilir:

 git push -f ...
 

Ve sadece de─čil git push .


34


2013-09-05





T├╝m bu ilk ad─▒mlar─▒ kendiniz tamamlayabilir ve git repo'ya geri d├Ânebilirsiniz.

  1. Komutu kullanarak havuzunuzun en son s├╝r├╝m├╝n├╝ Bitbucket'ten ├žekin git pull --all .

  2. Git log komutunu -n 4 ile terminalden ├žal─▒┼čt─▒r─▒n. -N'den sonraki say─▒, yerel ge├žmi┼činizdeki en son i┼člemden ba┼člayarak g├╝nl├╝kteki komisyon say─▒s─▒n─▒ belirler.

    $ git log -n 4

  3. Depo tarih├ženizin ba┼č─▒n─▒, git reset --hard HEAD~N N'yi geri almak istedi─činiz taahh├╝t say─▒s─▒n─▒ bulmak i├žin s─▒f─▒rlay─▒n . A┼ča─č─▒daki ├Ârnekte, ba┼č, havuz tarihindeki en son i┼čleme ba─čl─▒ olarak bir taahh├╝tte geri ├žekilir:

  4. De─či┼čikli─či git push --force zorlamak i├žin de─či┼čikli─či kullanarak git repo'ya bas─▒n.

Git deposunu ├Ânceki bir taahh├╝te eklemek istiyorsan─▒z

 git pull --all
git reset --hard HEAD~1
git push --force
 

30







En son i┼člemlere geri d├Ân├╝n ve t├╝m yerel de─či┼čiklikleri g├Ârmezden gelin:

 git reset --hard HEAD
 

28







Gerekli taahh├╝d├╝n├╝z├╝ se├žin ve kontrol edin

 git show HEAD
git show HEAD~1
git show HEAD~2 
 

gerekli taahh├╝d├╝ alana kadar. HEAD'in bunu g├Âstermesi i├žin

 git reset --hard HEAD~1
 

ya git reset --hard HEAD~2 da her neyse.


26







Bir ├Ânceki taahh├╝tten HEAD'e yap─▒lan de─či┼čiklikleri korumak ve bir ├Ânceki g├Âreve ge├žmek i├žin:

 git reset <SHA>
 

├ľnceki HEAD taahh├╝d├╝nde de─či┼čiklik yap─▒lmas─▒ gerekmiyorsa ve sadece t├╝m de─či┼čiklikleri att─▒─č─▒n─▒zda, ┼čunlar─▒ yap─▒n:

 git reset --hard <SHA>
 

21







Kodlay─▒c─▒n─▒n dizinini yanl─▒┼čl─▒kla yap─▒lan baz─▒ de─či┼čikliklerden tamamen temizlemek i├žin, ┼čunlar─▒ kulland─▒k:

 git add -A .
git reset --hard HEAD
 

Sadece git reset --hard HEAD de─či┼čikliklerden kurtulacaks─▒n─▒z, ancak "yeni" dosyalardan kurtulmayacak. Bu durumda yanl─▒┼čl─▒kla rastgele bir yere ├Ânemli bir klas├Âr├╝ s├╝r├╝klemi┼člerdi ve t├╝m bu dosyalar Git taraf─▒ndan yeni olarak de─čerlendiriliyordu, bu y├╝zden a reset --hard sorunu ├ž├Âzmedi. git add -A . ├ľnceden ├žal─▒┼čt─▒r─▒larak , s─▒f─▒rlama ile silinmek ├╝zere, t├╝m├╝ git ile a├ž─▒k├ža izlenir.


21







Bu, yeni yap─▒lan bir taahh├╝de do─črudan s─▒f─▒rlaman─▒n bir ba┼čka yolu.

 git stash
git stash clear
 

Son i┼člemden bu yana yapt─▒─č─▒n─▒z t├╝m de─či┼čiklikleri do─črudan temizler.

Not: K├╝├ž├╝k bir problemi var; ayr─▒ca son zamanlarda saklad─▒─č─▒n─▒z stash de─či┼čikliklerini siler. San─▒r─▒m ├žo─ču durumda ├Ânemli olmamal─▒.


21







Durum acil bir durumsa ve projenizin "benim projem" dizini alt─▒nda oldu─čunu varsayarsak, sorgunun istedi─čini h─▒zl─▒ ve kirli bir ┼čekilde yapmak istiyorsan─▒z :

  1. T├╝m dizini kopyalay─▒n ve "projem - kopyalay─▒n" gibi bir ┼čey daha aray─▒n

  2. Yap:

     git reset --hard [first-4-letters&numbers-of-commit's-SHA]
     

Daha sonra sisteminizde iki s├╝r├╝m bulunur ... ├Ânceki dosyalar─▒ izleyerek ilgilendi─činiz dosyalar─▒ inceleyebilir veya kopyalayabilir veya de─či┼čtirebilirsiniz. Yeni ├žal─▒┼čman─▒n hi├žbir yere gitmedi─čine karar vermi┼čseniz, "projem - kopyala" alt─▒ndaki dosyalar─▒ tamamen silebilirsiniz.

Bu al─▒nan taahh├╝t nedeniyle ├žal─▒┼čmay─▒ fiilen atmadan projenin durumunu devam ettirmek istiyorsan─▒z bariz olan ┼čey, dizininizi yeniden adland─▒rmakt─▒r: Al─▒nan taahh├╝d├╝ i├žeren projeyi silin (veya ge├žici bir ad verin) ve " projem - "dizini" projem "e geri kopyala. O zaman muhtemelen k─▒sa s├╝rede ba┼čka bir taahh├╝tte bulunun.

Git harika bir yarat─▒m ama sadece "an─▒nda yakalayamazs─▒n─▒z": ayn─▒ zamanda ├žok fazla a├ž─▒klamaya ├žal─▒┼čan di─čer VCS [S├╝r├╝m Kontrol Sistemleri] hakk─▒nda ├Ânceden bilgi sahibi olan ve ├žok k─▒sa bir s├╝re i├žinde ├žok derine inen insanlar ve ba┼čkalar─▒n─▒ su├žlamak i├žin neredeyse hesaplanm─▒┼č g├Âr├╝nen y├Ântemlerle ÔÇťkontrol etmekÔÇŁ i├žin birbirinin yerine ge├žebilecek terimleri kullanmak gibi di─čer su├žlar─▒ i┼člemek.

Stresten kurtulmak i├žin Git ile ilgili bir kitap okumak zorundas─▒n─▒z - "Git ile S├╝r├╝m Kontrol├╝" n├╝ ├Âneririm . Ve "mecbur" derken bana (ya da daha fazla yaralar─▒ma) g├╝venebilirseniz, ┼×─░MD─░ yapabilece─činizi de s├Âyler . Git'in karma┼č─▒kl─▒─č─▒n─▒n ├žo─ču dallanma ve sonra yeniden birle┼čmeden geliyor. Fakat sorunuza g├Âre, insanlar─▒n sizi bilimle k├Ârle┼čtirmesi i├žin hi├žbir neden yoktur .

├ľzellikle, ├Ârne─čin, bu ├žaresiz bir durumsa ve Git'te yeni do─čmu┼čsan─▒z!

Not: Ba┼čka bir d├╝┼č├╝nce: Git deposunu ("repo") ├žal─▒┼čan dosyalardan farkl─▒ bir dizinde tutmak olduk├ža basit. Bu, yukar─▒daki h─▒zl─▒ ve kirli ├ž├Âz├╝m├╝ kullanarak Git havuzunun tamam─▒n─▒ kopyalamak zorunda kalmayaca─č─▒n─▒z anlam─▒na gelir. Fryer'─▒n cevab─▒n─▒ burada --separate-git-dir kullanarak g├Ârebilirsiniz . Ancak, uyar─▒lmal─▒d─▒r : Kopyalamad─▒─č─▒n─▒z bir "ayr─▒ dizin" deponuz varsa ve donan─▒mdan s─▒f─▒rlama i┼člemi yaparsan─▒z, s─▒f─▒rlama i┼čleminden sonra gelen t├╝m s├╝r├╝mler, kesinlikle yapman─▒z gerekti─či gibi, sonsuza dek kaybedilir, Deponuzu d├╝zenli olarak yedekleyin, tercihen di─čer yerlerin yan─▒ s─▒ra Bulut (├Ârne─čin Google Drive ).

Bu "Buluta yedekleme" konusu ├╝zerinde, bir sonraki ad─▒m GitHub veya (benim g├Âr├╝┼č├╝me g├Âre daha iyi) GitLab ile bir hesap a├žmak (elbette ├╝cretsiz). git push Cloud repo'nuzu "d├╝zg├╝n" bir ┼čekilde yedeklemek i├žin d├╝zenli olarak bir komut yapabilirsiniz . Fakat yine de, bunun hakk─▒nda konu┼čmak ├žok yak─▒nda olabilir.


21







Baz─▒ insanlar─▒n ustalar─▒nda yapt─▒klar─▒ de─či┼čikliklerin nas─▒l geri al─▒naca─č─▒n─▒ bilmek isteyen bu soruya gelebileceklerine inan─▒yorum - yani her ┼čeyi bir kenara at─▒p k├Âkene / ustaya geri d├Ân├╝n, bu durumda, ┼čunu yap─▒n:

 git reset --hard origin/master
 

https://superuser.com/questions/273172/how-to-reset-master-to-origin-master


19







Geri alma, taahh├╝tleri geri alma komutudur.

 git revert <commit1> <commit2> 
 

Numune:

git revert 2h3h23233

A┼ča─č─▒daki gibi HEAD'den menzil alabilmektedir. Burada 1 "son i┼člemi geri al" diyor.

git revert HEAD~1..HEAD

ve sonra yap git push


17







En Son Taahh├╝tleri Geri Al:

 git reset --hard HEAD
 

HEAD bu, yaln─▒zca ge├žerli daldaki ge├žerli i┼čleme (en son) referanst─▒r. HEAD Herhangi bir zamanda yaln─▒zca bir tane olabilir .

Eski Bir Taahh├╝t'e Geri D├Ân: Eski bir s├╝r├╝m├╝ geri y├╝klemenin en h─▒zl─▒ yolu ┼ču reset komutu kullanmakt─▒r :

 # Resets index to former commit
git reset 56e05fced 

# Moves pointer back to previous HEAD
git reset --soft [email protected]{1}

# Updates working copy to reflect the new commit
git reset --hard
 

Bu, HEAD ┼čubenizi belirtilen s├╝r├╝me geri saracakt─▒r. Bu s├╝r├╝mden sonra gelen t├╝m taahh├╝tler etkili bir ┼čekilde geri al─▒nmaktad─▒r; Projeniz tam olarak o zamandaki noktadayd─▒.

S─▒f─▒rlama komutu, birka├ž se├ženekle gelir; en ilgin├žlerinden biri --soft bayrakt─▒r. Bunun yerine kullan─▒rsan─▒z --hard Git, "geri al─▒nm─▒┼č" durumdaki t├╝m de─či┼čiklikleri yerel de─či┼čiklikler olarak saklar.

Yeni Bir Yerel ┼×ubede Bir D├╝zeltmeyi Geri Y├╝kleme

S├Âyledi─čim gibi, ┼čubenizdeki reset komutunu kullanmak HEAD olduk├ža zor bir eylemdir: belirtilen revizyondan sonra gelen t├╝m taahh├╝tleri (bu daldaki) kald─▒racakt─▒r. ─░stedi─činin bu oldu─čundan eminsen, her ┼čey yolunda.

Bununla birlikte, mevcut HEAD ┼čubenizi dokunmadan b─▒rakmay─▒ tercih etmeniz durumunda daha g├╝venli bir yol vard─▒r. Git'te "┼čubeler" ├žok ucuz ve kolay oldu─ču i├žin, eski revizyondan itibaren kolayca yeni bir ┼čube olu┼čturabiliriz:

 git checkout -b old-project-state 0ad5a7a6
 

Normalde, ├Âdeme komutu sadece dallar─▒ de─či┼čtirmek i├žin kullan─▒l─▒r. Bununla birlikte, -b parametresini sa─člayarak yeni bir dal olu┼čturmas─▒na izin verebilirsiniz ( bu ├Ârnekte old-project-state ). Mevcut HEAD revizyonunda ba┼člamas─▒n─▒ istemiyorsan─▒z, eski bir proje revizyonunu eski haline getirmek i├žin eski bir revizyon yapmak zorundas─▒n─▒z.

Art─▒k, projenizin eski s├╝r├╝m├╝n├╝ yans─▒tan eski proje durumu ad─▒nda yeni bir ┼čubeniz var - ba┼čka bir komisyon veya ┼čubeye dokunmadan veya hatta ├ž─▒karmadan.


17







─░stedi─činiz i┼čleme s─▒f─▒rlamay─▒ deneyin -

git reset <COMMIT_ID>

(COMMIT_ID kullan─▒m─▒n─▒ kontrol etmek i├žin git log )

Bu, de─či┼čtirilen t├╝m dosyalar─▒ eklenmemi┼č durumuna s─▒f─▒rlayacakt─▒r.

Art─▒k checkout t├╝m eklenmemi┼č dosyalar─▒

git checkout .

Kontrol git log de─či┼čiklikleri do─črulamak i├žin.

G├ťNCELLE┼×T─░RME

Deponuzda yaln─▒zca bir tane taahh├╝t varsa , deneyin.

git update-ref -d HEAD


13







Taahh├╝tleriniz uzaktan itildi─činden, onlar─▒ ├ž─▒karman─▒z gerekir. ┼×ubenizin geli┼čti─čini ve k├Âkene itildi─čini varsayal─▒m.

─░lk ├Ânce geli┼čtirmeyi orijinden kald─▒rman─▒z gerekir:

 git push origin :develop (note the colon)
 

O zaman istedi─čin stat├╝de geli┼čmen gerekiyor, karar─▒n EFGHIJK oldu─čunu varsayal─▒m:

 git reset --hard EFGHIJK
 

Son olarak, tekrar geli┼čtirmeyi itin:

 git push origin develop
 

12







Dikkat! Bu komut, kullan─▒c─▒ yanl─▒┼č bir ┼čekilde yanl─▒┼č bir i┼člem yapt─▒ysa, ge├žmi┼čin kaybedilmesine neden olabilir. Hata yaparsan─▒z, biraz daha g├╝vende oldu─čunuza g├Âre, baz─▒ durumlarda gitmenizin bir k─▒sm─▒n─▒ yedekleyin. :)

Benzer bir sorun ya┼čad─▒m ve daha ├Ânceki bir taahh├╝tte bulunmak istiyorum. Benim durumumda kulland─▒─č─▒m i├žin yeni bir taahh├╝tte bulunma konusunda kararl─▒ de─čildim Hard .

Ben b├Âyle yapt─▒m:

 git reset --hard CommitId && git clean -f
 

Bu, yerel depoya geri d├Ânecek, burada kulland─▒ktan sonra git push -f uzaktan depo g├╝ncelleyecektir.

 git push -f
 

12







Son hatada baz─▒ hatalar─▒ d├╝zeltmek istiyorsan─▒z iyi bir alternatif git commit --amend komutunu kullanmak olacakt─▒r . Son taahh├╝t herhangi bir referansla i┼čaret edilmezse, bu son hileyle ayn─▒ veli ile bir taahh├╝t yaratt─▒─č─▒ i├žin hile yapar. Son taahh├╝d├╝n referans─▒ yoksa, sadece at─▒lacak ve bu taahh├╝t son taahh├╝t olacak. Bu, komisyonlar─▒ geri almadan komisyonlar─▒ d├╝zeltmenin iyi bir yoludur. Ancak, kendi s─▒n─▒rlamalar─▒ vard─▒r.


10



─░lgili yay─▒nlar


Git deposunu belirli bir i┼čleme nas─▒l geri d├Ând├╝r├╝r (s─▒f─▒rlar)? [├žift]

Normal bir Git deposunu ├ž─▒plak bir ├ževreye nas─▒l d├Ân├╝┼čt├╝rebilirim?

Yerel ve uzak git deposunu 1 taahh├╝tte geri alma

Git depomu belirli bir taahh├╝tte nas─▒l de─či┼čtirebilirim

T├╝m taahh├╝tleri kald─▒rmak i├žin uzak bir GIT deposunu nas─▒l s─▒f─▒rlar─▒m?

Ge├žmi┼či korurken, tek bir dizini git deposundan yeni deposuna nas─▒l ta┼č─▒r─▒m?

Git deposunu mercurial'a nas─▒l d├Ân├╝┼čt├╝rebilirim?

'Git g├╝nl├╝─č├╝', 'kesin tarih' g├Âsterilecek ┼čekilde nas─▒l yap─▒land─▒r─▒l─▒r?

Yerel Git havuzumu uzak Git havuzuna nas─▒l ta┼č─▒r─▒m?

Jenkins'in bir BitBucket git deposuna g├Ânderilmesini nas─▒l sa─člayabilirim?

Etiketle ilgili di─čer sorular [git]


Bir dizginin JavaScript'te bir alt dize i├žerip i├žermedi─čini kontrol etme

Android Soft Keyboard'u kapat─▒n / gizleyin

Bir SQL Server tablosunda bir s├╝tun olup olmad─▒─č─▒n─▒ kontrol etme?

Node.js'de nas─▒l ├ž─▒k─▒l─▒r

GUI'yi ba┼čka bir diziden nas─▒l g├╝ncellerim?

Yinelenen sat─▒rlar─▒ nas─▒l kald─▒rabilirim?

paketin ├Ânceki bir s├╝r├╝m├╝n├╝ y├╝kle

Tan─▒mlay─▒c─▒ ve tan─▒mlay─▒c─▒ olmayan ili┼čkiler aras─▒ndaki fark nedir?

Vim'de nas─▒l tekrar yapabilirim (yani ÔÇťgeri alÔÇŁ)?

Visual Studio'da E┼čle┼čen Brace?