Belirtilen bir taahh├╝t nas─▒l de─či┼čtirilir?


Al─▒nan cevaba git


Genelde incelenmek ├╝zere bir komisyon listesi g├Ânderirim. E─čer a┼ča─č─▒dakileri yaparsam:

  1. HEAD
  2. Commit3
  3. Commit2
  4. Commit1

... kafam─▒n kararl─▒l─▒─č─▒n─▒ de─či┼čtirebilece─čimi biliyorum git commit --amend . Ancak Commit1 , HEAD taahh├╝t olmad─▒─č─▒ i├žin nas─▒l de─či┼čiklik yapabilirim ?


2044









Cevap say─▒s─▒n─▒ say: 15






Git rebase kullanabilirsiniz . ├ľrne─čin, teslimi de─či┼čtirmek istiyorsan─▒z bbc643cd , ├žal─▒┼čt─▒r─▒n

 $ git rebase --interactive 'bbc643cd^'
 

L├╝tfen ^ komutun sonundaki ┼čapka i┼čaretine dikkat edin , ├ž├╝nk├╝ de─či┼čtirmek istedi─činiz i┼člemden ├Ânce tekrar i┼čleme koyman─▒z gerekir .

Varsay─▒lan d├╝zenleyicide, 'bbc643cd' yazan sat─▒rda de─či┼čiklik pick yap─▒n edit .

Dosyay─▒ kaydedin ve ├ž─▒k─▒n: git dosyadaki komutlar─▒ yorumlar ve otomatik olarak ├žal─▒┼čt─▒r─▒r. Kendinizi az ├Ânce taahh├╝t etmi┼č oldu─čunuz ├Ânceki durumda bulacaks─▒n─▒z bbc643cd .

Bu noktada, bbc643cd son taahh├╝d├╝n├╝z var ve kolayca de─či┼čtirebilirsiniz : de─či┼čikliklerinizi yap─▒n ve sonra ┼ču komutu verin:

 $ git commit --all --amend --no-edit
 

Bundan sonra, ┼čunu yaz─▒n:

 $ git rebase --continue
 

├Ânceki HEAD taahh├╝d├╝ne geri d├Ânmek i├žin.

UYARI : Bunun, SHA-1'in t├╝m ├žocuklar─▒n yan─▒ s─▒ra t├╝m ├žocuklar i├žin de de─či┼čece─čini - di─čer bir deyi┼čle, tarihi bu noktadan itibaren yeniden yazaca─č─▒n─▒ unutmay─▒n . Komutu kullanarak basarsan─▒z bunu yaparak repolar─▒ k─▒rabilirsiniz. git push --force


2692







Harika etkile┼čimli rebase kullan─▒n:

 git rebase -i @~9   # Show the last 9 commits in a text editor
 

─░stedi─činiz de─či┼čikli─či i┼člemek bul pick i├žin e ( edit ) ve kaydetmek ve yak─▒n dosyas─▒. Git, bu taahh├╝de geri d├Ânecek ve ┼čunlardan birini yapman─▒za olanak sa─člayacakt─▒r:

  • git commit --amend de─či┼čiklik yapmak i├žin kullan─▒n veya
  • git reset @~ Son i┼člemi reddetmek i├žin kullan─▒n , ancak dosyalardaki de─či┼čiklikleri yapmay─▒n (├Ârne─čin, dosyalar─▒ d├╝zenlerken bulundu─čunuz noktaya g├Ât├╝r├╝n, ancak hen├╝z i┼čleme konmad─▒).

─░kincisi, ├žoklu i┼člemlere b├Âlmek gibi daha karma┼č─▒k ┼čeyler yapmak i├žin kullan─▒┼čl─▒d─▒r.

Ard─▒ndan, ko┼čun git rebase --continue ve Git, de─či┼čtirilen taahh├╝d├╝n├╝z├╝n ard─▒ndan gelen de─či┼čiklikleri tekrarlar. Baz─▒ birle┼čtirme ├žak─▒┼čmalar─▒n─▒ d├╝zeltmeniz istenebilir.

Not: @ i├žin kesindir HEAD ve ~ belirtilen taahh├╝tten ├Ânceki taahh├╝tt├╝r.

Git belgelerinde ge├žmi┼či yeniden yazma hakk─▒nda daha fazla bilgi edinin .


Yeniden do─čmaktan korkma

ProTip Ôäó: Ge├žmi┼či yeniden yazan "tehlikeli" komutlar─▒ denemekten korkmay─▒n * - Git, varsay─▒lan olarak 90 g├╝n boyunca taahh├╝tlerinizi silmez; Onlar─▒ reflogda bulabilirsiniz:

 $ git reset @~3   # go back 3 commits
$ git reflog
c4f708b [email protected]{0}: reset: moving to @~3
2c52489 [email protected]{1}: commit: more changes
4a5246d [email protected]{2}: commit: make important changes
e8571e4 [email protected]{3}: commit: make some changes
... earlier commits ...
$ git reset 2c52489
... and you're back where you started
 

* Gibi --hard ve --force olsa se├ženekleri dikkat - onlar veri atabilir.
* Ayr─▒ca, i┼čbirli─či yapt─▒─č─▒n─▒z hi├žbir dalda ge├žmi┼či yeniden yazmay─▒n.



Bir├žok sistemde, git rebase -i Vim'i varsay─▒lan olarak a├žacakt─▒r. Vim, ├žo─ču modern metin edit├Âr├╝ gibi ├žal─▒┼čmaz, bu nedenle Vim kullanarak yeniden nas─▒l yap─▒land─▒r─▒laca─č─▒na bir g├Âz at─▒n . Farkl─▒ bir d├╝zenleyici kullanmay─▒ tercih ediyorsan─▒z, ile de─či┼čtirin git config --global core.editor your-favorite-text-editor .


409


2015-04-29





─░le birlikte --autosquash yeniden etkile┼čime girmek, ge├žmi┼če ili┼čkin daha ├Ânceki i┼čleri d├╝zeltmem gerekti─činde s─▒k kulland─▒─č─▒m bir ┼čey. Temelde ZelluX'un cevab─▒n─▒n g├Âsterdi─či s├╝reci h─▒zland─▒r─▒r ve d├╝zenlemeniz gereken birden fazla taahh├╝d├╝n├╝z oldu─čunda ├Âzellikle kullan─▒┼čl─▒d─▒r.

Belgelerden:

--autosquash

Taahh├╝t g├╝nl├╝─č├╝ mesaj─▒ "squash!ÔÇŽ" (Veya "fixup!ÔÇŽ") ─░le ba┼člad─▒─č─▒nda ve ayn─▒ ba┼čl─▒kla ba┼člayan bir tahakkuk varsa, rebase -i yap─▒lacak listesini otomatik olarak de─či┼čtirin. Squashing i├žin i┼čaretlenmi┼č tadilattan hemen sonra gelir

Buna benzeyen bir ge├žmi┼činiz oldu─čunu varsay─▒n:

 $ git log --graph --oneline
* b42d293 Commit3
* e8adec4 Commit2
* faaf19f Commit1
 

ve Commit2'de de─či┼čtirmek istedi─činiz de─či┼čikliklerin ard─▒ndan de─či┼čikliklerinizi kullanarak

 $ git commit -m "fixup! Commit2"
 

Alternatif olarak, taahh├╝t mesaj─▒ yerine taahh├╝t mesajlar─▒n─▒ kullanabilirsiniz, "fixup! e8adec4 hatta taahh├╝t mesaj─▒n─▒n bir ├Ân ekini bile kullanabilirsiniz.

Ard─▒ndan, ├Ânceki taahh├╝tte etkile┼čimli bir yeniden rebase ba┼člat

 $ git rebase e8adec4^ -i --autosquash
 

edit├Âr├╝n├╝z zaten do─čru ┼čekilde sipari┼č edilen taahh├╝tler ile a├ž─▒lacakt─▒r.

 pick e8adec4 Commit2
fixup 54e1a99 fixup! Commit2
pick b42d293 Commit3
 

Yapman─▒z gereken tek ┼čey kaydetmek ve ├ž─▒kmak


70







Ko┼čmak:

$ git rebase --interactive commit_hash^

her biri ^ , yaln─▒zca bir tanesini (sizin belirtti─činiz taahh├╝t karmas─▒), ne kadar─▒n─▒ geri d├╝zenlemek istedi─činizi belirtir ^ .

Vim kelimeleri de─či┼čtirmek kullanma pick i├žin reword kaydet g├Âre, de─či┼čikli─če istedi─činiz kaydedilmesini ve ├ž─▒kmak ( :wq ). Ard─▒ndan git sizden reword olarak i┼čaretledi─činiz her bir taahh├╝tte sizden bilgi ister, b├Âylece taahh├╝t mesaj─▒n─▒ de─či┼čtirebilirsiniz.

Her i┼člem mesaj─▒ kaydetmeniz ve bir :wq sonraki i┼člem mesaj─▒na ge├žmek i├žin ( ) uygulamas─▒ndan ├ž─▒kman─▒z gerekir.

De─či┼čiklikleri uygulamadan ├ž─▒kmak istiyorsan─▒z, :q!

D├ťZENLEME : gezinmek i├žin vim kulland─▒─č─▒n─▒z j kadar gitmek, k a┼ča─č─▒ gitmeye h sola gitmek ve l (b├╝t├╝n bu do─čru gitmeye NORMAL moduna bas─▒n ESC gitmek i├žin NORMAL mod). Bir metni d├╝zenlemek i├žin, metin i girdi─činiz INSERT moda girmek i├žin tu┼čuna bas─▒n . Moda ESC geri d├Ânmek i├žin NORMAL bas─▒n :)

G├ťNCELLEME : ─░┼čte github listesinden harika bir link Git ile bir ┼čeyi nas─▒l geri al─▒rs─▒n─▒z (neredeyse)


39







Herhangi bir nedenden dolay─▒ etkile┼čimli edit├Ârleri sevmiyorsan─▒z kullanabilirsiniz git rebase --onto .

De─či┼čtirmek istedi─čini s├Âyle Commit1 . ─░lk ├Ânce , ├Âncekinden dal Commit1 :

 git checkout -b amending [commit before Commit1]
 

─░kincisi, kep├že Commit1 ile cherry-pick :

 git cherry-pick Commit1
 

┼×imdi, de─či┼čikliklerinizi d├╝zeltip Commit1' ┼čunlar─▒ olu┼čturun :

 git add ...
git commit --amend -m "new message for Commit1"
 

Ve son olarak, ba┼čka herhangi bir de─či┼čikli─čin yap─▒lmas─▒ndan sonra, taahh├╝tlerinizin geri kalan─▒n─▒ master yeni taahh├╝d├╝n├╝z├╝n ├╝st├╝ne kadar nakledin:

 git rebase --onto amending Commit1 master
 

Oku: "┼×ube ├╝zerine yeniden yap─▒lanma (dahil olmayan) ve (dahil) amending aras─▒ndaki t├╝m taahh├╝tleri yerine getirir ". Di─čer bir deyi┼čle, eski Commit1'i tamamen kesen Commit2 ve Commit3. Onlar─▒ sadece kirazl─▒ toplayabilirsin, ama bu yol daha kolay. Commit1 master

┼×ubelerini temizlemeyi unutma!

 git branch -d amending
 

17







Tamamen etkile┼čimli olmayan komut (1)

Sadece bunun i├žin kulland─▒─č─▒m takma ad─▒ payla┼čaca─č─▒m─▒ d├╝┼č├╝nd├╝m. Etkile┼čimli olmayan etkile┼čimli rebase'e dayan─▒yor . Git'inize eklemek i├žin bu komutu ├žal─▒┼čt─▒r─▒n (a┼ča─č─▒da verilen a├ž─▒klama):

 git config --global alias.amend-to '!f() { SHA=`git rev-parse "$1"`; git commit --fixup "$SHA" && GIT_SEQUENCE_EDITOR=true git rebase --interactive --autosquash "$SHA^"; }; f'
 

Bu komutun en b├╝y├╝k avantaj─▒ " vim " olmamas─▒ .


(1) Tabii ki, yeniden yap─▒lanma s─▒ras─▒nda herhangi bir ├žat─▒┼čma olmad─▒─č─▒ndan

kullan─▒m

 git amend-to <REV> # e.g.
git amend-to HEAD~1
git amend-to aaaa1111
 

Ad─▒ amend-to uygun g├Âr├╝n├╝yor IMHO. Ak─▒┼č─▒ ile kar┼č─▒la┼čt─▒r─▒n --amend :

 git add . && git commit --amend --no-edit
# vs
git add . && git amend-to <REV>
 

a├ž─▒klama

  • git config --global alias.<NAME> '!<COMMAND>' - git <NAME> git komutunu ├žal─▒┼čt─▒racak isimli global bir git takma ad─▒ olu┼čturur <COMMAND>
  • f() { <BODY> }; f - bir "anonim" bash i┼člevi.
  • SHA=`git rev-parse "$1"`; - arg├╝man─▒ git revizyonuna d├Ân├╝┼čt├╝r├╝r ve sonucu de─či┼čkene atar SHA
  • git commit --fixup "$SHA" - D├╝zeltme taahh├╝d├╝ i├žin SHA . Dok├╝manlara bak─▒n git-commit
  • GIT_SEQUENCE_EDITOR=true git rebase --interactive --autosquash "$SHA^"
    • git rebase --interactive "$SHA^" b├Âl├╝m di─čer cevaplar taraf─▒ndan ele al─▒nm─▒┼čt─▒r.
    • --autosquash ile birlikte kullan─▒lan nedir git commit --fixup , daha fazla bilgi i├žin git-rebase belgelere bak─▒n
    • GIT_SEQUENCE_EDITOR=true Her ┼čeyi etkile┼čimli olmayan ┼čey budur. Bu hack bu blog yaz─▒dan ├Â─črendim .

11







Belgelere Dayal─▒https://help.github.com/articles/changing-a-commit-message/

Daha eski veya ├žoklu taahh├╝t mesaj─▒ mesaj─▒n─▒ de─či┼čtirme

 git rebase -i HEAD~3 
 

Yukar─▒daki, mevcut ┼čubedeki son 3 i┼čin bir listesini g├Âsterir, daha fazlas─▒n─▒ istiyorsan─▒z 3'├╝ ba┼čka bir ┼čeyle de─či┼čtirin. Liste a┼ča─č─▒dakine benzer olacakt─▒r:

 pick e499d89 Delete CNAME
pick 0c39034 Better README
pick f7fde4a Change the commit message but push the same commit.
 

De─či┼čtir almak ile reword her De─či┼čtirmek istedi─činiz iletiyi i┼člemek ├Ânce. Listedeki ikinci i┼člemi de─či┼čtirdi─činizi varsayal─▒m, dosyan─▒z a┼ča─č─▒daki gibi g├Âr├╝necek:

 pick e499d89 Delete CNAME
reword 0c39034 Better README
pick f7fde4a Change the commit message but push the same commit.
 

Onay listesi dosyas─▒n─▒ kaydedin ve kapat─▒n; bu, onay mesaj─▒n─▒z─▒ de─či┼čtirmek, onay mesaj─▒n─▒ de─či┼čtirmek ve kaydetmek i├žin yeni bir d├╝zenleyici a├žar.

Finaly Tadil edilen komisyonlar─▒ zorla itin.

 git push --force
 

11







Bu yakla┼č─▒ma var─▒ld─▒ (ve muhtemelen etkile┼čimli rebase kullanmakla tam olarak ayn─▒) ancak benim i├žin ├žok basit.

Not: Bu yakla┼č─▒m─▒, g├╝nl├╝k bir alternatif yerine yapabileceklerinizin ill├╝strasyonu u─čruna sunuyorum. Bir├žok basama─ča (ve muhtemelen baz─▒ uyar─▒lar) sahip oldu─čundan.

Dile─činizi de─či┼čtirmek istedi─činizi 0 ve ┼ču anda feature-branch

 some-commit---0---1---2---(feature-branch)HEAD
 

Bunun i├žin taahh├╝tte bulunun ve olu┼čturun quick-branch . ├ľzellik dal─▒n─▒z─▒ bir kurtarma noktas─▒ olarak da klonlayabilirsiniz (ba┼člamadan ├Ânce).

 ?(git checkout -b feature-branch-backup)
git checkout 0
git checkout -b quick-branch
 

┼×imdi b├Âyle bir ┼čeye sahip olacaks─▒n:

 0(quick-branch)HEAD---1---2---(feature-branch)
 

Sahne de─či┼čikli─či, her ┼čeyi saklamak.

 git add ./example.txt
git stash
 

De─či┼čiklikleri yap ve teslim et feature-branch

 git commit --amend
git checkout feature-branch
 

┼×imdi b├Âyle bir ┼čeye sahip olacaks─▒n:

 some-commit---0---1---2---(feature-branch)HEAD
           \
             ---0'(quick-branch)
 

Rebase feature-branch ├╝zerine quick-branch (yol boyunca herhangi ├žat─▒┼čmalar─▒ ├ž├Âzmek). Stash uygulay─▒n ve ├ž─▒kar─▒n quick-branch .

 git rebase quick-branch
git stash pop
git branch -D quick-branch
 

Ve sonunda:

 some-commit---0'---1'---2'---HEAD(feature-branch)
 

Git yinelenmeyecek (ger├žekte ne kadar─▒n─▒ s├Âyleyemem), yeniden yap─▒lanma s─▒ras─▒nda 0.

Not: T├╝m taahh├╝t karmalar─▒, ba┼člang─▒├žta de─či┼čtirmeyi planlad─▒─č─▒m─▒z taahh├╝tten ba┼člayarak de─či┼čtirilir.


7


2016-06-01





Otomatik etkile┼čimli yeniden d├╝zenleme d├╝zenlemesini takiben geri al─▒m i├žin haz─▒r hale getirme i┼člemi ger├žekle┼čtirildi

Kendimi s─▒k s─▒k bir ge├žmi┼če sad─▒k kal─▒rken, bunun i├žin bir senaryo yazd─▒─č─▒m─▒ tespit ettim.

─░┼čte i┼č ak─▒┼č─▒:

  1.  git commit-edit <commit-hash>
     

    Bu sizi d├╝zenlemek istedi─činiz taahh├╝tte b─▒rakacakt─▒r.

  2. ─░lk etapta olmas─▒n─▒ istedi─činiz gibi taahh├╝d├╝n├╝z├╝ d├╝zeltin ve geli┼čtirin.

    ( git stash save ─░┼člemedi─činiz dosyalar─▒ saklamak i├žin kullanmak isteyebilirsiniz )

  3. ─░le taahh├╝t Yinele --amend , ├Ârne─čin:

     git commit --amend
     
  4. Rebase tamamlay─▒n:

     git rebase --continue
     

Yukar─▒dakilerin ├žal─▒┼čmas─▒ i├žin, a┼ča─č─▒daki beti─či git-commit-edit sizin yerinizde bir yerde ad─▒ verilen ├žal─▒┼čt─▒r─▒labilir bir dosyaya yerle┼čtirin $PATH :

 #!/bin/bash

set -euo pipefail

script_name=${0##*/}

warn () { printf '%s: %s\n' "$script_name" "$*" >&2; }
die () { warn "[email protected]"; exit 1; }

[[ $# -ge 2 ]] && die "Expected single commit to edit. Defaults to HEAD~"

# Default to editing the parent of the most recent commit
# The most recent commit can be edited with `git commit --amend`
commit=$(git rev-parse --short "${1:-HEAD~}")
message=$(git log -1 --format='%h %s' "$commit")

if [[ $OSTYPE =~ ^darwin ]]; then
  sed_inplace=(sed -Ei "")
else
  sed_inplace=(sed -Ei)
fi

export GIT_SEQUENCE_EDITOR="${sed_inplace[*]} "' "s/^pick ('"$commit"' .*)/edit \\1/"'
git rebase --quiet --interactive --autostash --autosquash "$commit"~
git reset --quiet @~ "$(git rev-parse --show-toplevel)"  # Reset the cache of the toplevel directory to the previous commit
git commit --quiet --amend --no-edit --allow-empty  #  Commit an empty commit so that that cache diffs are un-reversed

echo
echo "Editing commit: $message" >&2
echo
 

7







Etkile┼čimli olmayan bir komut almak i├žin PATH'nize bu i├žeri─če sahip bir komut dosyas─▒ yerle┼čtirin:

 #!/bin/sh
#
# git-fixup
# Use staged changes to modify a specified commit
set -e
cmt=$(git rev-parse $1)
git commit --fixup="$cmt"
GIT_EDITOR=true git rebase -i --autosquash "$cmt~1"
 

De─či┼čikliklerinizi (ile git add ) sahneleyerek kullan─▒n ve ard─▒ndan ├žal─▒┼čt─▒r─▒n git fixup <commit-to-modify> . Tabii ki, ├žat─▒┼čmalar olursa hala etkile┼čimli olacak.


6







Bunu ├ž├Âzd├╝m

1) istedi─čim de─či┼čikliklerle yeni taahh├╝tler olu┼čturarak ..

 r8gs4r commit 0
 

2) onunla birle┼čmem gereken hangi taahh├╝d├╝ biliyorum. Hangi 3 oldu─čunu taahh├╝t.

├Âyleyse, git rebase -i HEAD~4 # 4 yak─▒n tarihli 4 taahh├╝d├╝ temsil eder (burada 3 numaral─▒ s├Âzle┼čme 4. s─▒rada)

3) etkile┼čimli rebase'de son taahh├╝t altta yer alacakt─▒r. benzeyecek

 pick q6ade6 commit 3
pick vr43de commit 2
pick ac123d commit 1
pick r8gs4r commit 0
 

4) burada belirli olan─▒ birle┼čtirmek istiyorsan─▒z, taahh├╝d├╝m├╝z├╝ yeniden d├╝zenlememiz gerekir. gibi olmal─▒

 parent
|_child

pick q6ade6 commit 3
f r8gs4r commit 0
pick vr43de commit 2
pick ac123d commit 1
 

yeniden sonra de─či┼čtirmek gerekir p pick ile f ( d├╝zeltme mesaj─▒ taahh├╝t olmadan birle┼čecek) ya da s ( kabak mesaj taahh├╝t ile birle┼čtirme ├žal─▒┼čma zaman─▒nda de─či┼čtirebilece─činiz)

ve sonra a─čac─▒n─▒ kurtar.

┼čimdi varolan bir taahh├╝tle yap─▒lan birle┼čme.

Not: Kendi ba┼č─▒n─▒za kalmazsan─▒z, tercih edilmeyen bir y├Ântemdir. E─čer b├╝y├╝k tak─▒m─▒n b├╝y├╝kl├╝─č├╝ne sahipseniz, git a─čac─▒n─▒ yeniden yazmak i├žin kabul edilebilir bir y├Ântem de─čil, di─čer al─▒┼čkanl─▒klar─▒n bilmedi─činiz ├žat─▒┼čmalarla sonu├žlan─▒r. E─čer a─čac─▒ daha az taahh├╝tle temiz tutmak istiyorsan bunu deneyebilirsin ve e─čer k├╝├ž├╝k tak─▒m─▒ yoksa tercih edilemez.


4







git stash + rebase otomasyon

Gerrit incelemeleri i├žin eski bir taahh├╝d├╝mde defalarca de─či┼čiklik yapmam gerekti─čine g├Âre:

 git-amend-old() (
  # Stash, apply to past commit, and rebase the current branch on to of the result.
  current_branch="$(git rev-parse --abbrev-ref HEAD)"
  apply_to="$1"
  git stash
  git checkout "$apply_to"
  git stash apply
  git add -u
  git commit --amend --no-edit
  new_sha="$(git log --format="%H" -n 1)"
  git checkout "$current_branch"
  git rebase --onto "$new_sha" "$apply_to"
)
 

GitHub yukar─▒ ak─▒┼č .

Kullan─▒m─▒:

  • dosyay─▒ de─či┼čtir
  • git-amend-old $old_sha

--autosquash Di─čer ilgisiz d├╝zeltmeleri ezmedi─či i├žin bunu sevdim .


4







Benim i├žin baz─▒ bilgiler bir depodan silmek i├žindi. Yeniden do─čmaya ├žal─▒┼čt─▒m ve yeniden in┼ča etmeye ├žal─▒┼č─▒rken, devam ederken bir ton g├Âr├╝n├╝┼čte alakas─▒z ihtilafla kar┼č─▒la┼čt─▒m. Kendinizi yeniden canland─▒rmaya te┼čebb├╝s etmeyin, mac ├╝zerinde BFG (brew install bfg) adl─▒ arac─▒ kullan─▒n.


2







E─čer daha ├Ânce komisyonlar─▒ zorlamad─▒ysan─▒z, kullanarak ├Ânceki bir i┼čleme geri d├Ânebilirsiniz. git reset HEAD^[1,2,3,4...]

├ľrne─čin

 git commit <file1> -m "Updated files 1 and 2"
git commit <file3> -m "Updated file 3"
 

Maalesef, ilk i┼člemeye file2 eklemeyi unuttum ...

 git reset HEAD^1 // because I only need to go back 1 commit

git add <file2>
 

Bu ilk i┼čleme, file2'yi ekleyecektir.


0







Eh, bu ├ž├Âz├╝m ├žok sa├žma gelebilir, ancak baz─▒ durumlarda sizi kurtarabilir.

Bir arkada┼č─▒m yanl─▒┼čl─▒kla yanl─▒┼čl─▒kla baz─▒ b├╝y├╝k dosyalar─▒ (her biri 3 GB ile 5 GB aras─▒nda de─či┼čen d├Ârt otomatik olarak olu┼čturulan dosya) i┼člemeye ├žal─▒┼čt─▒ ve daha sonra git push ├žal─▒┼čamayan problemi fark etmeden ├Ânce bunun ├╝zerine baz─▒ ek kodlar verdi !

Dosyalar listelenmi┼čti .gitignore ancak kapsay─▒c─▒ klas├Âr├╝n├╝ yeniden adland─▒rd─▒ktan sonra ortaya ├ž─▒kar─▒ld─▒ ve i┼člendi! Ve ┼čimdi bunun ├╝zerine bir ka├ž kod daha vard─▒, ama push sonsuza dek ├žal─▒┼č─▒yordu (GB veri y├╝klemeye ├žal─▒┼č─▒yordu!) Ve sonunda Github'un dosya boyutu limitleri nedeniyle ba┼čar─▒s─▒zl─▒─ča u─črad─▒ .

Etkile┼čimli rebase veya benzeri bir ┼čeyle ilgili sorun, bu devasa dosyalar─▒n etraf─▒n─▒ d├╝rtmekle u─čra┼čmalar─▒ ve sonsuza dek bir ┼čey yapmalar─▒yd─▒. Bununla birlikte, CLI'de yakla┼č─▒k bir saat ge├žirdikten sonra, dosyalar─▒n (ve deltalar─▒n) ger├žekten ge├žmi┼čten kald─▒r─▒ld─▒─č─▒ndan veya yaln─▒zca ge├žerli taahh├╝tlere dahil edildi─činden emin de─čildik. ─░tme de i┼če yaramad─▒ ve arkada┼č─▒m ger├žekten s─▒k─▒┼čt─▒.

Bu y├╝zden buldu─čum ├ž├Âz├╝m ┼čuydu:

  1. Ge├žerli git klas├Âr├╝n├╝ yeniden adland─▒r─▒n ~/Project-old .
  2. Git klas├Âr├╝n├╝ tekrar github'dan (to ~/Project ) kopyalay─▒n .
  3. Ayn─▒ ┼čubeye ├ž─▒k─▒┼č.
  4. El ile cp -r dosyalar─▒ndan ~/Project-old klas├Âre ~/Project .
  5. Teslim edilmesi gerekmeyen b├╝y├╝k dosyalar─▒n mv ed oldu─čundan ve .gitignore uygun ┼čekilde eklendi─činden emin olun.
  6. Ayr─▒ca .git son kullan─▒lanlar ~/Project taraf─▒ndan eskisinin kopyalad─▒─č─▒ klas├Âr├╝n ├╝zerine yazmad─▒─č─▒n─▒zdan emin olun . Sorunlu tarihin g├╝nl├╝klerinin ya┼čad─▒─č─▒ yer oras─▒!
  7. ┼×imdi de─či┼čiklikleri g├Âzden ge├žirin. Sorunlu dosyalar hari├ž, t├╝m son taahh├╝tlerin birli─či olmal─▒d─▒r.
  8. Sonunda de─či┼čiklikleri yap, ve anla┼č─▒lmas─▒ iyi push .

Bu ├ž├Âz├╝mle ilgili en b├╝y├╝k sorun, baz─▒ dosyalar─▒ el ile kopyalamakla ilgilenmesi ve ayr─▒ca t├╝m son taahh├╝tleri bire bir ┼čekilde birle┼čtirmesidir (belli ki yeni bir karma i┼člem ile).

En b├╝y├╝k faydas─▒, her ad─▒mda ├žok a├ž─▒k oldu─ču gibi, b├╝y├╝k dosyalar (hassas olanlar i├žin oldu─ču kadar) i├žin de harika ├žal─▒┼č─▒yor ve tarihte geride hi├žbir iz b─▒rakm─▒yor!


0



─░lgili yay─▒nlar


Mevcut, yay─▒nlanmam─▒┼č taahh├╝t mesajlar─▒ nas─▒l de─či┼čtirilir?

Belirli bir taahh├╝t i├žin taahh├╝t yazar─▒ nas─▒l de─či┼čtirilir?

ÔÇťGit commitÔÇŁ yerine ÔÇťgit commit --amendÔÇŁ nas─▒l yap─▒l─▒r

Bir taahh├╝t mesaj─▒n─▒ de─či┼čtirmeden bir taahh├╝t de─či┼čikli─či nas─▒l yap─▒l─▒r (bir ├Ânceki mesaj─▒ tekrar kullanarak)?

Bir metin dosyas─▒n─▒ nas─▒l de─či┼čtirebilirim?

Eclipse IDE'de klavye k─▒sayollar─▒ nas─▒l de─či┼čtirilir?

Github ├žekme iste─či nas─▒l de─či┼čtirilir?

Homebrew i├žin PATH nas─▒l de─či┼čtirilir?

D├Âng├╝ s─▒ras─▒nda liste giri┼čleri nas─▒l de─či┼čtirilir?

Ge├žmi┼čte baz─▒ iki keyfi komisyon aras─▒nda bir taahh├╝t nas─▒l enjekte edilir?

Etiketle ilgili di─čer sorular [git]


Metin se├žimi vurgulamas─▒ nas─▒l devre d─▒┼č─▒ b─▒rak─▒l─▒r

Bir InputStream'i Java'da bir Dizgeye nas─▒l okurum / d├Ân├╝┼čt├╝r├╝r├╝m?

Sakl─▒ yordam─▒n sonu├žlar─▒n─▒ ge├žici bir tabloya ekleyin.

window.onload vs $ (belge). zaten ()

Base64 kodlamas─▒ node.js'de nas─▒l yap─▒l─▒r?

IFrame'den s─▒n─▒r─▒ kald─▒r

jQuery: Se├žilen eleman etiketi ad─▒n─▒ al

Bir Docker Resmini Konteyner Olarak ├çal─▒┼čt─▒rma

Java neden statik y├Ântemlerin ge├žersiz k─▒l─▒nmas─▒na izin vermiyor?

React-router URL'leri el ile yenilerken veya yazarken ├žal─▒┼čm─▒yor