V spoločnosti Git mám experimentálnu pobočku (EXP-12
). Urobil som tam nejaké zmeny, ale ešte nie som pripravený na splnenie. Potrebujem vykonať úpravy majstra.
Idem na zvládnutie.
Možné sú dva prípady:
- Ak som zahrnul zmeny do indexu
EXP-12
, zobrazia sa aj v indexe na hlavnej pobočke. - Ak by som nemal zahrnúť moje zmeny do indexu
EXP-12
, tieto súbory sa budú zobrazovať ako zmeny, ktoré nie sú vykonané pre spúšťanie na hlavnej pobočke.
Môj problém je, že chcem, aby všetko na pánovi a EXP-12
byť oddelené. Chcem robiť nejaké experimentálne zmeny EXP-12
> prejdite na master> vykonajte zmeny na master> fáze všetko pre commit (git add -A
)> commit> prepnite späť na EXP-12 a pokračujte v pokusoch. Teraz, keď to urobím, môj záväzok na hlavnej pobočke bude zahŕňať všetky zmeny EXP-12
.
Aká je logika za tým? Alebo mi niečo chýba?
odpovede:
0 pre odpoveď č. 1Klasické riešenie tohto problému je použiť git stash
- keď ste znovu zapnutý EXP-12
môžete robiť:
git stash save --keep-index "Some work-in-progress on EXP-12"
... potom zmeňte pobočku na zvládnutie ako obvykle, urobte nejakú prácu, zmeňte späť a aplikujte posledný stash:
git checkout master
[... do some stuff ...]
git checkout EXP-12
git stash pop
Ja však osobne preferujem vytvorenie pracovného postupu a neskôr buď:
- Zmeňte to
git commit --amend
- Presunúť vetvu späť na predchádzajúci odovzdanie, ale ponechať všetku vašu prácu ako nestabilné zmeny pomocou:
git reset HEAD^
- ... alebo použite
git rebase -i <EARLIER-COMMIT>
na squash niekoľko work-in-progress záväzky dohromady.
Výhoda vytvorenia skutočného odovzdaniapomocou skrytu môžete použiť skrytie na akýkoľvek záväzok, nie len ten, na ktorý ste ho uložili, zatiaľ čo normálny záväzok presunie túto pobočku dopredu a je viazaný na predchádzajúce záväzky.