Git - Stash عملیات



فرض کنید که در حال کار برروی یک ویژگی جدید برای محصولتان هستید، در حال نوشتن کد پروژه هستید، که ناگهان customer escalation میاید. به این دلیل شما باید کارتان روی ویژگی جدید را برای مدتی کنار بگذارید. شما نمیتوانید کارتان را نصفه و نیمهتمام commit کنید و همچنین نمیتوانید دور بیاندازیدش، بنابراین شما باید آن را به طور موقت در جایی قرار دهید و در زمان مناسب، آن را تکمیل و commit کنید

در git عمل stash برای این تعبیه شدهاست که فایلهای شما رهگیری stage area را که هنوز commit نشدهاند، در stack ذخیره شود و شما در هر زمام که بخواهید، بتوانید آنها را ادامه دهید

[jerry@CentOS project]$ git status -s
M string.c
?? string

حالا شما میخواهید branch را برای customer escalation تغییر دهید، اما نمیخواهید تغییراتی را که روی آنها کار میکردید commit کنید، بنابراین شما تغییراتتان را به جای Stash, Commit میکنید. برای اضافه کردن یک stash به پشته خود، از دستور git stash استفاده میکنیم

[jerry@CentOS project]$ git stash
Saved working directory and index state WIP on master: e86f062 Added my_strcpy function
HEAD is now at e86f062 Added my_strcpy function

حالا working directory ما خالی شده و روی پشته ما ذخیره شده است، میتوانیم صحت جمله قبل را با دستور git stasus بررسی کنیم

[jerry@CentOS project]$ git status -s
?? string

اکنون میتوانیم با خیال آسوده branch را تغییر و کارمان را جای دیگری ادامه دهیم. میتوانیم فهرست تغییراتی را که stash شدهاند، با دستور git stash list ببینیم

[jerry@CentOS project]$ git stash list
stash@{0}: WIP on master: e86f062 Added my_strcpy function

اکنون فرض کنیم مشکلمان با customer escalation حل شده و میخواهیم کار برروی ویژگی جدیدمان- که نیمه کاره رها کردیم- را ادامه دهیم. کافیست دستور git stash pop را اجرا کنیم، این دستور آخرین تغییرات را از روی stack برداشته و به working directory منتقل میکند

[jerry@CentOS project]$ git status -s
?? string

[jerry@CentOS project]$ git stash pop

دستورات بالا نتایج زیر را در برخواهند داشت:

# On branch master
# Changed but not updated:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
#
#
modified: string.c
#
# Untracked files:
# (use "git add ..." to include in what will be committed)
#
#
string
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (36f79dfedae4ac20e2e8558830154bd6315e72d4)

[jerry@CentOS project]$ git status -s
M string.c
?? string
Advertisements