рдЧреАрддрд╛ рдХрд╛ рдЙрдиреНрдирдд рдЙрдкрдпреЛрдЧ рдпрд╛ рдЫрд╣ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рд░рд┐рдЯрд╛рдпрд░ рдХреИрд╕реЗ рдХрд░реЗрдВ?


рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдк рдХрд┐рд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдк рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдЧреАрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рдХрд╛рд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдХрд░рдг рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдмрд╕реЗ рдЫреЛрдЯреА рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛, рдореИрдВ рд╣рдореЗрд╢рд╛ git init рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВред рдФрд░ рдХрд╛рд░реНрдп рджрд┐рд╡рд╕ рдХреЗ рджреМрд░рд╛рди рдореИрдВ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдФрд░ 80 рдЯреАрдореЛрдВ рдХреЗ рдФрд╕рдд рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рддрд╛ рд╣реВрдВред


рдЬрдм рдореИрдВрдиреЗ рджрд╕-рдКрдБрдЧрд▓реА рдЫрд╛рдкрдиреЗ рдХреА рд╡рд┐рдзрд┐ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рдореИрдВрдиреЗ рдмрд╣реБрдд рд╕рд╛рд░реА рдирд╕реЗрдВ рдЦрд░реНрдЪ рдХреАрдВред рдЕрдВрдд рдореЗрдВ, рдпрд╣ рдЖрдкрдХреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд┐рд░реНрдгрдп рдерд╛ред рдЕрдЧрд▓реЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдиреБрдХреВрд▓рди рдореЗрдВ рдЧреАрддрд╛ рдХрд╛ рдЙрдиреНрдирдд рд╡рд┐рдХрд╛рд╕ рд╣реИред


рдЧреАрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рд▓реЗрдЦ рд╣реИрдмрд░ рдкрд░ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕реЗ рдкрд░реЗ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рд▓реЗрдЦрдХреЛрдВ рдиреЗ рд╕реНрд╡-рдирд┐рд░реНрдорд┐рдд рдмреИрд╕рд╛рдЦреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рдЧреАрдд рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рдорд╛рдирдХреАрдХреГрдд рд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рджрдХреНрд╖рддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХрд░рдирд╛ рд╣реИред


рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рдХрд┐рд╕реЗ рд▓рд╛рдн рд╣реЛрдЧрд╛?


рдХреНрдпрд╛ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рд╕рдЬреНрдЬрди рдХреЗ рдЧреАрддрд╛ рдХреЗ рд╕реЗрдЯ рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд▓реА рд╣реИ рдФрд░ рдХреНрдпрд╛ рдЖрдк рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ? 2 рддрд░реАрдХреЗ рд╣реИрдВ:


  1. рдорд╛рд╕реНрдЯрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЖрджреЗрд╢ - рдЙрдкрдирд╛рдоред рд╡реЗ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рд╕реНрдорд░рдХ рдФрд░ рдпрд╛рдж рд░рдЦрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реЛрддреЗ рд╣реИрдВред рдореВрд▓ рдЖрджреЗрд╢реЛрдВ рдХреЛ рднреВрд▓ рдЬрд╛рдирд╛ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИ, рдореИрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдЯрд╛рдЗрдк рдХрд░рддрд╛ рд╣реВрдВред рд╕рд╛рде рд╣реА, рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╕рдордп рдЧреАрддрд╛ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдБрдЪрдиреЗ рд╕реЗ рдореИрдВ рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реВрдБред
  2. рдЯреАрдореЛрдВ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЭрдВрдбреЗ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЙрдирдХреЗ рдмреАрдЪ рдПрдХреАрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗрдВред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рдХрд╛рдЯрдиреЗ рд╕реЗ рдирдлрд░рдд рд╣реИред рдЖрдкрдХреЗ рд▓рд┐рдП, рднреА, рд▓реЗрдЦ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╛рдордЧреНрд░реА рд╣реИ - рдХрдорд╛рдВрдб рдЖрдЙрдЯрдкреБрдЯ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдФрд░ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдХреИрд╕реЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдП, рд╕рд╛рде рд╣реА рд╕рдмрд╕реЗ рддреБрдЪреНрдЫ рдирд╣реАрдВ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рдЕрднреНрдпрд╛рд╕ рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред

рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдЬ рдХреБрдЫ рдШрдВрдЯреЗ рд╕рдорд░реНрдкрд┐рдд рдХрд░реЗрдВ, рдФрд░ рдЫрд╣ рдорд╣реАрдиреЗ рдХреЗ рдХрд╛рдордХрд╛рдЬреА рдЬреАрд╡рди рдХреА рдЕрдиреБрдорд╛рдирд┐рдд рдЧрдгрдирд╛ рд╕реЗ рдмрдЪрд╛рдПрдВред


рдмрд┐рд▓реНрд▓реА рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!


рдЯреНрд░реЗрдирд┐рдВрдЧ


рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдмреАрдЪ, Bash рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ Zsh , рдЬреЛ рдПрдХ рдЙрдиреНрдирдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╢реЗрд▓ рд╣реИ рдЬреЛ рдлрд╛рдЗрди-рдЯреНрдпреВрдирд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдФрд░ Zsh рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмреАрдЪ, рдорд╛рдирдХ Oh My Zsh рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, Zsh рд▓рд┐рдП рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЗрд╕ рдХрд┐рдЯ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЙрд╕ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рдПрдВрдЧреЗ, рдЬреЛ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рдПрдХрддреНрд░рд┐рдд рдФрд░ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИред


рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ Zsh рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╣реИ , рдФрд░ рдореИрдХ рдХреЗ рд▓рд┐рдП , рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рднреАред


Zsh рдФрд░ Oh My Zsh рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ


рдПрдХ рдЖрджреЗрд╢ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ Zsh рдФрд░ Oh My Zsh рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:


 # macOS brew install zsh zsh-completions && sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" # Ubuntu, Debian, ... apt install zsh && sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" 

рдЪреВрдВрдХрд┐ рдХрд╛рд░реНрдп рдЧреАрдд рдХреЗ рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо Zsh рдореЗрдВ рдкреНрд▓рдЧ-рдЗрди рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдЬреЛрдбрд╝ Zsh ред ~/.zshrc рдЦреЛрд▓реЗрдВ рдФрд░ рд╕реВрдЪреА рдореЗрдВ plugins рдЬреЛрдбрд╝реЗрдВ:


 plugins=(git gitfast) 

рдХреБрд▓:


  • git - рдЙрдкрдирд╛рдо рдФрд░ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ;
  • gitfast - рдЧреАрддрд╛ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд╛рдпрд╛ рдЧрдпрд╛ рдСрдЯреЛ-рдкреВрд░реНрдгред

tig рд╕реЗрдЯрд┐рдВрдЧ


рдФрд░ рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢ tig рдХрдВрд╕реЛрд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреА рд╕реНрдерд╛рдкрдирд╛ рд╣реИ:


 # macOS brew install tig # Ubuntu, Debian, ... # https://jonas.imtqy.com/tig/INSTALL.html 

рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдЧреЗ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред


рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЬреБрдЯ рдЬрд╛рдПрдВ


рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдХреЗ рдЧреАрддрд╛ рдХреЗ рд╕рд╛рде рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред рдЕрдЧрд▓рд╛, рд╣рдо рдЙрдирдХреЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рджреИрдирд┐рдХ рдЕрднреНрдпрд╛рд╕ рдФрд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╛рда рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рднрдВрдбрд╛рд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред


рдкреАрд▓реЗ рдЦрдВрдб рдЦрдВрдб рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдЙрдкрдирд╛рдо рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ рдЗрд╕реЗ рдЬрд╛рдиреЗрдВ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдЫреЛрдбрд╝ рджреЗрдВред

рдХрд╛рд░реНрдпрд╢реАрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ


рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рдЪреАрдЬрд╝ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдордиреЗ рдереЛрдбрд╝рд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд░реНрдХрд┐рдВрдЧ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:


 $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: e.md Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: b.md Untracked files: (use "git add <file>..." to include in what will be committed) d.md 

рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рдорд╣рд╛рди рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрджреЗрд╢ рджрд┐рдП рдЧрдП рд╣реИрдВред рдЧреАрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рджреИрдирд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИред рдЪрд▓реЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╢реЛрд░ рд╕реНрддрд░ рдХрдо рдХрд░рддреЗ рд╣реИрдВ:


 $ git status -sb ## master M b.md A e.md ?? d.md 

рд╣рд╛рдБ, рд╣рдо master рд╢рд╛рдЦрд╛ рдореЗрдВ рд╣реИрдВ, b.md ( M-odified ) рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рджреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдирд╛рдпрд╛ рд╣реИ, рдкрд╣рд▓реЗ рдХреЛ рдЧреАрддрд╛ рд╕реВрдЪрдХрд╛рдВрдХ ( A-dded ) рдореЗрдВ A-dded , рдФрд░ рджреВрд╕рд░рд╛ рдЗрдВрдбреЗрдХреНрд╕ ( ?? ) рдХреЛ рдЫреЛрдбрд╝ рдХрд░ред рдЫреЛрдЯрд╛ рдФрд░ рд╕реНрдкрд╖реНрдЯред


рдпрд╣ рдЗрд╕ рдХрдорд╛рдВрдб рдХреЗ рдЕрдВрддрд╣реАрди рдЗрдирдкреБрдЯ рдХреЛ рдЙрд░реНрдл " g it tatus with b ranch" рджреНрд╡рд╛рд░рд╛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ:


рдЫреЛрдЯреА рдХрд╛рд░реНрдпрд╢реАрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реНрдерд┐рддрд┐ рджрд┐рдЦрд╛рдПрдВ

 $ gsb # git status -sb 


рдПрдХ рдХрдорд┐рдЯ рдмрдирд╛рдПрдБ


рд╣рдо рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред


рдмреЗрд╢рдХ, рдЖрдк рдХрдорд┐рдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЖрдЗрдП рдЗрд╕ рд╕рд░рд▓ рдХрд╛рд░реНрдп рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЗ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЙрдкрдирд╛рдо " g d d a a ll" рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝реЗрдВ :


 $ gaa # git add --all 

рд╣рдо рдЬрд╛рдБрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд░реНрдл " g it if d if ca ched" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ


 $ gdca # git diff --cached diff --git a/b.md b/b.md index 698d533..cf20072 100644 --- a/b.md +++ b/b.md @@ -1,3 +1,3 @@ # Beta -Next step. +Next step really hard. diff --git a/d.md b/d.md new file mode 100644 index 0000000..9e3752e --- /dev/null +++ b/d.md @@ -0,0 +1,3 @@ +# Delta + +Body of article. 

рд╣рдореНрдо, рдПрдХ рдПрдХрд▓ рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рд╡рд░реНрддрди рдПрдХ рдкреНрд░рддрд┐рдмрджреНрдз рдореЗрдВ рдЧрд┐рд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдВ, рджреЛрдиреЛрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЬреБрдбрд╝реЗ рдирд╣реАрдВ рд╣реИрдВред рдЖрдЗрдП рдЙрдкрдирд╛рдо рдХреЗ рд╕рд╛рде d.md рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЙрдкрдирд╛рдо " g r r eset u ndo" рд╕реЗ рдмрд╛рд╣рд░ рдХрд░реЗрдВ :


 $ gru d.md # git reset -- d.md 

рдФрд░ рдЙрд░реНрдл " рдЬреА рдЗрдЯ рд╕реА рдУрдорд┐рдЯ" рдХреЗ рд╕рд╛рде рдПрдХ рдХрдорд┐рдЯ рдмрдирд╛рдПрдБ:


 $ gc # git commit 

рд╣рдо рдХрдорд┐рдЯ рдХрд╛ рдирд╛рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ рд╕реЗрд╡ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдлрд┐рд░ рд╣рдо рдЙрдкрдирд╛рдо рдХреЗ d.md рдлрд╝рд╛рдЗрд▓ d.md рдФрд░ рдкрд░рд┐рдЪрд┐рдд рдХрдорд╛рдВрдб d.md рд╣реИрдВ, d.md рдЙрдкрдирд╛рдо " g it c ommit m e s sa g e" :


 $ gaa #    $ gcmsg "Add new file" # git commit -m "Add new file" 

рдФрд░ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ...


... рдПрдХ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдлрд╛рдЗрд▓ рдХрд░реЗрдВ:


 $ gcam "Add changes" # git commit -a -m "Add changes" 

... рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдмрдЬрд╛рдп рд╢рдмреНрджреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦреЗрдВ (рдкрд╛рда рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА):


 $ gdw # git diff --word-diff 

... рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ (рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдХреЗрд╡рд▓ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ):


 $ gapa # git add --patch 

... рдХреЗрд╡рд▓ рдЧреАрддрд╛ рдХреА рджреЗрдЦрд░реЗрдЦ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХ рдЬреЛрдбрд╝реЗрдВ:


 $ gau # git add --update 

рдХреБрд▓:


рдЗрдВрдбреЗрдХреНрд╕ / рдХреНрд░рд┐рдПрдЯ рдХрдорд┐рдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ

 $ ga # git add $ gc # git commit 


рдареАрдХ рдХрд░рдирд╛


рдЕрдВрддрд┐рдо рдкреНрд░рддрд┐рдмрджреНрдз рдХрд╛ рдирд╛рдо рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЪрд▓реЛ рд╕реБрдзрд╛рд░ рдХрд░реЗрдВ:


 $ gc! # git commit -v --amend 

рдФрд░ рдЦреБрд▓рдиреЗ рд╡рд╛рд▓реЗ рдкрд╛рда рд╕рдВрдкрд╛рджрдХ рдореЗрдВ, рд╣рдо рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣реЗрдВрдЧреЗ: "Add Delta article" ред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдк рдХрднреА рднреА -v рд╕реНрд╡рд┐рдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрдорд┐рдЯ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдХрд┐рдП рдЧрдП рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдЬреЛ рдмреЗрд╣рддрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред


рдФрд░ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ...


... рдХрдорд┐рдЯ рдореЗрдВ рдлрд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рд╡рд░рдг рдХреЛ рди рдЫреБрдПрдВ:


 $ gcn! # git commit -v --no-edit --amend 

... рд╕рднреА рдлрд╝рд╛рдЗрд▓ рдкрд░рд┐рд╡рд░реНрддрди рддреБрд░рдВрдд рдХрдорд┐рдЯ рдореЗрдВ рдХрд░реЗрдВ, рдкрд╣рд▓реЗ рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛:


 $ gca! # git commit -v -a --amend 

... рджреЛ рдкрд┐рдЫрд▓реЗ рдЖрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдВ:


 $ gcan! # git commit -v -a --no-edit --amend 

рдЦреИрд░, рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЬрд░реВрд░реА рд╣реИ рдХрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ git commit -v --amend , рд╣рдо рддреАрди рдмрд╛рд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:


рдЕрдВрддрд┐рдо рдкреНрд░рддрд┐рдмрджреНрдз рдмрджрд▓реЗрдВ

 $ gc! # git commit -v --amend 


рдПрдХ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдкрд░ рдЖрд░рдВрдн рдХрд░рдирд╛


рд╡рд░реНрддрдорд╛рди рдЙрдкрдирд╛рдо рд╕реЗ рдПрдХ рдирдИ рд╢рд╛рдЦрд╛ рдмрдирд╛рдПрдВ "рдЗрд╕реЗ рдЧ рд╣реЗрдХрдЖрдЙрдЯ рдмреА рд░реЗрдВрдЪ" :


 $ gcb erlang # git checkout --branch erlang 

рдпрджреНрдпрдкрд┐ рдирд╣реАрдВ, рдПрд▓рд┐рдХреНрд╕рд┐рд░ рдЙрд░реНрдл " рдЬреА рдЗрдЯ рдмреА рд░рдВрдЪ рд╡рд┐рде рдж рдХреАрд╡ рдПрдо " (рдЧреАрддрд╛ рдореЗрдВ рдирд╛рдо рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЖрдзреБрдирд┐рдХ рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ:


 $ gb -m elixir # git branch -m elixir 

рдЙрд░реНрдл gbmv рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЕрднреА рддрдХ рдЗрд╕рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред рдПрдХ рдпреЛрдЧрджрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдкред


рд╣рдо рднрдВрдбрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдкреНрд░рддрд┐рдмрджреНрдз рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ:


 $ echo "#  тАФ     ." > e.md $ gaa && gcmsg "Add article about Elixir" 

рдФрд░ рдпрд╛рдж рд░рдЦреЗрдВ:


рдПрдХ рдирдИ рд╢рд╛рдЦрд╛ рдмрдирд╛рдПрдБ

 $ gcb # git checkout --branch 


рдорд░реНрдЬ рдореЗрдВ рдмрджрд▓рд╛рд╡


рдЕрдм рд╣рдо рдЕрдореГрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ рдирдП рд▓реЗрдЦ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореБрдЦреНрдп рд╢рд╛рдЦрд╛ рдХреЗ рд╕рд╛рде рдЙрдкрдирд╛рдо " g it c heckout m aster" :


 $ gcm # git checkout master 

рдирд╣реАрдВ, рд╕рдЪ рдореЗрдВред рддреАрди рдЖрд╕рд╛рдиреА рд╕реЗ рдпрд╛рдж рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкрд╛рддреНрд░реЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХрдорд╛рдВрдбред рдЕрдм рдЙрд░реНрдл тАЛтАЛрдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдорд░реНрдЬ " рдЬреА рдЗ рдПрдо рдПрдЧреЗ" рд╣реИ :


 $ gm elixir # git merge elixir 

рдЙрдлрд╝, рд▓реЗрдХрд┐рди рдХреЛрдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА master рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рдФрд░ рд╕реБрдВрджрд░ рд░реИрдЦрд┐рдХ рдЗрддрд┐рд╣рд╛рд╕ рдХреЗ рдмрдЬрд╛рдп рдЬреЛ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЕрдкрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореИрдВрдиреЗ рдмрдирд╛рдпрд╛ рдирдлрд░рдд рдорд░реНрдЬ рдХрд░рдирд╛ред


рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рдорд┐рд▓рд╛рдПрдВ

 $ gm # git merge 


рдЕрдВрддрд┐рдо рдкреНрд░рддрд┐рдмрджреНрдз рд╣рдЯрд╛рдПрдВ


рдЪрд┐рдВрддрд╛ рдХреА рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ! рдЖрдкрдХреЛ рдмрд╕ рдЕрдВрддрд┐рдо рдкреНрд░рддрд┐рдмрджреНрдз рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдорд░реНрдЬ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП " g r r eset hh ard" :


рдЕрдВрддрд┐рдо рдкреНрд░рддрд┐рдмрджреНрдз рд╣рдЯрд╛рдПрдВ

 $ grhh HEAD~ # git reset --hard HEAD~ 


рд╣рдо рд╕рдВрдШрд░реНрд╖реЛрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддреЗ рд╣реИрдВ


рдорд╛рдирдХ checkout тАУ rebase тАУ merge рдПрдХ рд░реЗрдЦреАрдп рдкрд░рд┐рд╡рд░реНрддрди рдЗрддрд┐рд╣рд╛рд╕ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП checkout тАУ rebase тАУ merge рдЕрдиреБрдХреНрд░рдо рдЙрдкрдирд╛рдореЛрдВ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрдХреНрд░рдо рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


 gco elixir # git checkout elixir grbm # git rebase master gcm # git checkout master gm elixir # git merge elixir 

рдЙрди рд╕рднреА рдХреЛ рдЕрдХреНрд╕рд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рд╕реЗ рджреВрд░ рдЙрдбрд╝ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рдХрд┐рд╕ рд╕реЗрдЯ рдХреЛ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рд╣реИред рдФрд░ рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ Zsh рдЖрдк Tab рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЛ рдкреВрд░рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдПрдХ рд░рд┐рдмреЗрд╕ рдХрд░реЗрдВ

 $ grb # git rebase 


рд╕рд░реНрд╡рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╕рдмрдорд┐рдЯ рдХрд░рдирд╛


рдкрд╣рд▓реЗ рд╣рдо рдЙрд░реНрдл " g it r emote a dd" рдХреЗ origin рдЬреЛрдбрд╝рддреЗ origin :


 $ gra origin git@github.com/... # git remote add origin git@github.com/... 

рдФрд░ рдлрд┐рд░ рд╣рдо рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рд╡рд░реНрддрдорд╛рди рд╢рд╛рдЦрд╛ рдореЗрдВ рд╕реАрдзреЗ рдкрд░рд┐рд╡рд░реНрддрди рднреЗрдЬрддреЗ рд╣реИрдВ ( "рдЬреАрдЬреА" - рдХрдорд╛рдВрдб рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рджреЛрдЧреБрдирд╛ g рд╡рд░реНрддрдорд╛рди рд╢рд╛рдЦрд╛ рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ):


 $ ggpush # git push origin git_current_branch 

рдЖрдк рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ...


... рд╕рд░реНрд╡рд░ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ upstream рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЗ рд╕рд╛рде " g it p p us s et up stream" рдЙрдкрдирд╛рдо:


 $ gpsup # git push --set-upstream origin $(git_current_branch) 

рд╕рд░реНрд╡рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВ

 $ gp # git push 


рд╣рдореЗрдВ рд╕рд░реНрд╡рд░ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ


рдХрд╛рдо рдЬреЛрд░реЛрдВ рдкрд░ рд╣реИред рд╣рдо master рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд▓реЗрдЦ f.md рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ, рдФрд░ рд╣рдорд╛рд░реЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдиреЗ рд▓реЗрдЦ a.md рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬ рджрд┐рдпрд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рднреА рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


 $ gup # git pull --rebase 

рдлрд┐рд░ рдЖрдк рд╕рд░реНрд╡рд░ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдВрдШрд░реНрд╖ рд╕реБрд▓рдЭрд╛ рд╣реБрдЖ рд╣реИред


рд╕рд░реНрд╡рд░ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

 $ gl # git pull 


рд╡рд┐рд▓реАрди рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ


рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ elixir рд╢рд╛рдЦрд╛ рд╕рд╣рд┐рдд рдХрдИ рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ master рдореЗрдВ рдорд┐рд▓рд╛ рджрд┐рдпрд╛ред рд╣рдореЗрдВ рдЕрдм рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЖрдк рдЙрд░реНрдл " g it b ranch d elete a nother" рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ:


 $ gbda # git branch --no-color --merged | command grep -vE "^(\*|\s*(master|develop|dev)\s*$)" | command xargs -n 1 git branch -d 

рдмрд╣реБрдд рд╕реБрдВрджрд░ рдФрд░ рдЪрд╛рд▓рд╛рдХ рдЯреАрдоред рдЖрдорддреМрд░ рдкрд░ рдореИрдВ рдЙрди рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рд╕рд╛рдл рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рддрд╛ рд╣реВрдВ рдЬреЛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдЦреЛ рдЪреБрдХреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд╕реБрдВрджрд░ рдЯреАрдо рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореЛрдХреНрд╖ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рдЙрдкрдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдмрд╕ рдХрдорд╛рдВрдб рдХреЗ рдкреВрд░реНрдг рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЕрдкрдиреЗ рдиреЛрдЯреНрд╕ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ, рдФрд░ рдЗрд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВред


рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдкреНрд░рддрд┐рдмрджреНрдз рдмрдирд╛рдПрдБ


рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирдП h.md рд▓реЗрдЦ рдкрд░ рдХрд╛рдо рдЬреЛрд░реЛрдВ рдкрд░ рд╣реИред рдЖрдзрд╛ рд▓рд┐рдЦрд┐рдд рдФрд░ рдЖрдкрдХреЛ рдПрдХ рд╕рд╣рдпреЛрдЧреА рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рджреЛ рдмрд╛рд░ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд┐рдирд╛, рд╣рдо рдЙрдкрдирд╛рдо " g it w ork i n p rogress" рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ :


 $ gwip # git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify -m "--wip-- [skip ci]" 

рдФрд░ рдлрд┐рд░ рдПрдХ Work in Progress рдХреЗ рдирд╛рдо рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, Work in Progress рдХреЛ рд╕реАрдЖрдИ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдирд╛ рдФрд░ "рдЕрддрд┐рд░рд┐рдХреНрдд" рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ред рд╣рдо рд╢рд╛рдЦрд╛ рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрддреЗ рд╣реИрдВ, рдЗрд╕ рд╕рд╣рдпреЛрдЧреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рдореАрдХреНрд╖рд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред


рдлрд┐рд░ рдпрд╣ рд╡рдЪрди рдкреВрд░реНрд╡рд╡рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдлрд╛рдЗрд▓реЗрдВ рдЕрдкрдиреЗ рдореВрд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реМрдЯ рдЖрдИ рд╣реИрдВ:


 $ gunwip # git log -n 1 | grep -q -c "\-\-wip\-\-" && git reset HEAD~1 

рдФрд░ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреА рд╢рд╛рдЦрд╛ рдореЗрдВ WIP рдХрдорд┐рдЯ рд╣реИрдВ, рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:


 $ work_in_progress 

рдЬрдм рдЖрдкрдХреЛ рдкрдбрд╝реЛрд╕реА рд╢рд╛рдЦрд╛ рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ gwip рдХрдорд╛рдВрдб gwip рдХрд╛ рдХрд╛рдлреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдПрдирд╛рд▓реЙрдЧ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди Zsh рдореЗрдВ рдЦреБрдж рдХреЛ stash рд▓рд┐рдП рдХрдИ рдЙрдкрдирд╛рдо рд╣реИрдВред


рдЕрд╕реНрдерд╛рдпреА рдХрдореЗрдЯ / рдЕрд╕реНрдерд╛рдпреА рдХрдореЗрдЯ рдЬреЛрдбрд╝реЗрдВ

 $ gwip $ gunwip 


рдкрд░рд┐рд╡рд░реНрддрди рдЫрд┐рдкрд╛ рд░рд╣рд╛ рд╣реИ


рдЗрд╕ рдХрдорд╛рдВрдб рд╕реЗ рдЖрдкрдХреЛ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЫрд┐рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдПрдХ рд▓рд╛рдкрд░рд╡рд╛рд╣ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣рд╛рдБ рдПрдХ reflog рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдЦреЛрдП рд╣реБрдП рдХрд╛рдо рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдЪрд▓рд┐рдП рд╣рдо рдЙрди рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЫрд┐рдкрд╛рддреЗ рд╣реИрдВ рдЬрд┐рди рдкрд░ рд╣рдо рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣ рдПрдХ рд░рд╛рдЦ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ :


 $ gsta # git stash save 

рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдЙрд░реНрдл " g it st ash p op" рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рдПрдВ:


 $ gstp # git stash pop 

рдпрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд " рдЬреА рдпрд╣ рдПрдХ рдПрд╢ pply рд╣реЛрдЧрд╛" рд╡рд┐рдзрд┐ :


 $ gstaa # git stash apply 

рдЖрдк рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ...


... рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдо рдХреНрдпрд╛ рдЫрд┐рдкрд╛рддреЗ рд╣реИрдВ:


 gsts # git stash show --text 

... рд╕рдВрдмрдВрдзрд┐рдд рдЖрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд╖рд┐рдкреНрддрд┐рдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:


 gstc # git stash clear gstd # git stash drop gstl # git stash list 

рдкрд░рд┐рд╡рд░реНрддрди / рдкрд░рд┐рд╡рд░реНрддрди рдмрджрд▓реЗрдВ

 $ gsta $ gstaa 


рдмрдЧ рдХреА рддрд▓рд╛рд╢ рд╣реИ


git-bisect рдЯреВрд▓, рдЬрд┐рд╕рдиреЗ рдмрд╛рд░-рдмрд╛рд░ рдореЗрд░реА рдЬрд╛рди рдмрдЪрд╛рдИ рд╣реИ, рдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЙрдкрдирд╛рдо рднреА рд╣реИрдВред рд╣рдо "рдмрд╛рдЗрдирд░реА рдПрд░рд░ рд╕рд░реНрдЪ" рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ " g it b s ect s tart" рдЙрдкрдирд╛рдо рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ :


 $ gbss # git bisect start 

рд╣рдо рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐, рд╢рд╛рдЦрд╛ рдореЗрдВ рдЕрдВрддрд┐рдо, рдХрдорд┐рдЯрдореЗрдВрдЯ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдирд╛рдо " g it b s ect2 ad" рд╣реИ ред


 $ gbsb # git bisect bad 

рдЕрдм рд╣рдо рдЙрд╕ рдХрдорд┐рдЯ рдХреЛ рдЪрд┐рдиреНрд╣рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ " g it b s ect ect ood"


 $ gbsg HEAD~20 # git bisect good HEAD~20 

рдФрд░ рдЕрдм рдпрд╣ рдЧреАрддрд╛ рдХреЗ рд╢рдмреНрдж gbsb рдпрд╛ gbsg рдХреЗ рд╕рд╛рде рдЙрддреНрддрд░ рджреЗрдирд╛ рдЬрд╛рд░реА gbsg , рдФрд░ рдЕрдкрд░рд╛рдзреА рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░реЗрдВ:


 $ gbsr # git bisect reset 

рдФрд░ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЗрди рд╕рдВрдХреНрд╖рд┐рдкреНрддреАрдХрд░рдгреЛрдВ рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реВрдВред


рддреНрд░реБрдЯрд┐ рдЦреЛрдЬ

 $ gbss # git bisect start $ gbsb # git bisect bad $ gbsg # git bisect good $ gbsr # git bisect reset 


рд╣рдо рдЕрдзрд░реНрдо рдХреЗ рдЙрдХрд╕рд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ


рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХрд╡рд░реЗрдЬ рдХреЗ рдЙрдЪреНрдЪ рдкреНрд░рддрд┐рд╢рдд рдХреЗ рд╕рд╛рде, рдХреЛрдИ рднреА рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдкреНрд░рддрд┐рд░рдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреГрдкрдпрд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рд╛рдЗрди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ a.md рдлрд╛рдЗрд▓ рдХреА рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдореЗрдВ a.md рдЧрд▓рддреА рдХреАред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:


 $ gbl a.md -L 2 # git blame -b -w a.md -L 2 

рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ, Oh My Zsh рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛рдУрдВ рдиреЗ рди рдХреЗрд╡рд▓ git blame рдЯреАрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрд░реНрдл тАЛтАЛрдмрдирд╛рдпрд╛, рдмрд▓реНрдХрд┐ рдЗрд╕рдореЗрдВ рдЪрд╛рдмрд┐рдпрд╛рдБ рдЬреЛрдбрд╝ Oh My Zsh рдЬреЛ Oh My Zsh рдХреЛ рдвреВрдВрдврдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддреА рд╣реИрдВред


рдмреЛрдирд╕


рдХрдорд┐рдЯ рдХреА рд╕реВрдЪреА рджреЗрдЦреЗрдВ


рдХрдорд┐рдЯ рдХреА рд╕реВрдЪреА рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд░реВрдкрдг рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде git log рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдХрдорд╛рдВрдб, рдЪрд╛рдмрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рдЧреАрддрд╛ рдХреЗ рдХрд╕реНрдЯрдо рдЙрдкрдирд╛рдореЛрдВ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдЕрдзрд┐рдХ рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдЙрд░реНрдл тАЛтАЛрдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ: glog ред рдФрд░ рдпрджрд┐ рдЖрдкрдиреЗ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рд╕рд▓рд╛рд╣ рдкрд░ tig рдпреВрдЯрд┐рд▓рд┐рдЯреА рд╕реНрдерд╛рдкрд┐рдд рдХреА рд╣реИ, рддреЛ рдЖрдк рдПрдХ рдкреВрд░реНрдг рдЪреИрдВрдкрд┐рдпрди рд╣реИрдВред


рдЕрдм, рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХрдорд┐рдЯреНрд╕ рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╢рдмреНрдж рдХреЗ рд╡рд┐рдкрд░реАрдд рдЯрд╛рдЗрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛:


 $ tig 

рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдЬреЛрдбрд╝ рднреА рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ рдЬреЛ рдЧреАрддрд╛ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рд╣реИрдВред


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдХрд╣рд╛рдиреА рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдорд╛рдВрдб:


 $ tig grep 

рджреВрд╕рд░реЗ, рдЕрдкрдиреЗ рдЗрддрд┐рд╣рд╛рд╕ рдХреЗ рд╕рд╛рде рд╕рднреА рд╕реНрд░реЛрддреЛрдВ, рд╢рд╛рдЦрд╛рдУрдВ, рдЯреИрдЧреЛрдВ рдХреА рд╕реВрдЪреА рджреЗрдЦрдирд╛:


 $ tig refs 

рддреАрд╕рд░рд╛, рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд▓рд┐рдП рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдорд┐рд▓реЗрдЧрд╛:


 $ tig --help 

рдЕрдХрд╕реНрдорд╛рдд рдмрдирд╛рдпрд╛ рдЧрдпрд╛ git reset --hard


рдЖрдкрдиреЗ рдкреВрд░реЗ рджрд┐рди elixir рд╢рд╛рдЦрд╛ рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛:


 $ glog * 17cb385 (HEAD -> elixir) Refine Elixir article * c14b4dc Add article about Elixir * db84d54 (master) Initial commit 

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЧрд▓рддреА рд╕реЗ рд╕рдм рдХреБрдЫ рд╣рдЯрд╛ рджрд┐рдпрд╛:


 $ grhh HEAD~2 HEAD is now at db84d54 Initial commit 

рдШрдмрд░рд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВред рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд┐рдпрдо рдЧреАрддрд╛ рдФрд░ рд╕рд╛рдБрд╕ рдЫреЛрдбрд╝рддреЗ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЖрджреЗрд╢ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдмрдВрдж рдХрд░рдирд╛ рд╣реИ ред рд╕реНрдерд╛рдиреАрдп рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рд╛рде рд╕рднреА рдХреНрд░рд┐рдпрд╛рдПрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд▓реЙрдЧ - reflog рдореЗрдВ рджрд░реНрдЬ рдХреА рдЬрд╛рддреА рд╣реИрдВред рдЗрд╕рд╕реЗ, рдЖрдк рд╡рд╛рдВрдЫрд┐рдд рдХрдорд┐рдЯ рдХрд╛ рд╣реИрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреЗрдбрд╝ рдкрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдЪрд▓реЛ рд░рд┐рдлреНрд▓рдЧ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ git reflog рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рддрд┐рд▓реЗрдЦ рдХреЗ рд╕рд╛рде рдФрд░ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ:


 $ glg -g 

рд╡рд╛рдВрдЫрд┐рдд 17cb385 рдХреЗ рд╣реИрд╢ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:


 #           $ gcb elixir-recover 17cb385 #    $ gbd elixir #     $ gb -m elixir 

рд╕рдВрдпреЛрдЧ рд╕реЗ, рдореИрдВрдиреЗ рдПрдХ рдирдИ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдкрд┐рдЫрд▓реЗ рдПрдХ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд┐рдП


рдпрд╣рд╛рдВ рд╣рдо рдлрд┐рд░ рд╕реЗ рдмрдЪрд╛рд╡ рд╕рд╣рд╛рдпрддрд╛ рдореЗрдВ рдЖрдПред рд╣рдо рдореВрд▓ 17cb385 рдХрдорд┐рдЯ рдХрд╛ рд╣реИрд╢ рдкрд╛рддреЗ рд╣реИрдВ, рдЕрдЧрд░ рд╣рдо рддреБрд░рдВрдд рд╣реА рдЗрд╕ рдХрдорд┐рдЯ рдХреЛ рд░рджреНрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рд╣реИрд╢ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЗрд╕реЗ рддреНрд╡рд░рд┐рдд рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ HEAD@{1} ред рдЕрдЧрд▓рд╛ рд╣рдо рдПрдХ рдирд░рдо рд░реАрд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рд╕реВрдЪрдХрд╛рдВрдХ рд░реАрд╕реЗрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ:


 #      $ grh --soft HEAD@{1} # git reset -soft #   $ gcmsg "Commit description" 

рд╢рд╛рдЦрд╛ рдмрд╣реБрдд рдкреБрд░рд╛рдиреА рд╣реИ


рдХрднреА-рдХрднреА рдЖрдк рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рд░рд┐рд▓реАрдЬрд╝ рдЕрдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд▓ рдХреЗ рд▓рд┐рдП рд╡рд┐рд▓рдВрдмрд┐рдд рд╣реЛрддреА рд╣реИред рдЖрдк рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИрдВ рдФрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╣реИрдВред рдЯреАрдо рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдЖрдк рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдЖрдк рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╢рд╛рдЦрд╛ рдореЗрдВ рд▓реМрдЯрддреЗ рд╣реИрдВред рдЖрдк рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╣ рдПрдХ рджрд░реНрдЬрди рдХрдорд┐рдЯрд┐рдпреЛрдВ рдореЗрдВ рд╕рдВрдШрд░реНрд╖реЛрдВ рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЙрди рд╕рднреА рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред


рдЖрдЗрдП elixir рдирд╛рдордХ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рд╢рд╛рдЦрд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:


 #   master $ gcm # git checkout master #        $ gcb elixir-new # git checkout --branch elixir-new #           $ gcp elixir@{0} # git cherry-pick elixir@{0} 

рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╢рд╛рдЦрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рд╕рд┐рдВрдЧрд▓ рдХрдорд┐рдЯ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рддреЗ рд╣реИрдВред


рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдбреЗрдЯрд╛ рд╣рдЯрд╛рдирд╛


рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдбреЗрдЯрд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдирд┐рдкреЗрдЯ рдХреЛ рд╕рд╣реЗрдЬрд╛ рд╣реИ:


 $ git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch <path-to-your-file>' --prune-empty --tag-name-filter cat -- --all && git push origin --force --all 

рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдЖрдкрдХрд╛ stash рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рдкрд╣рд▓реЗ рд╕рднреА рдЫрд┐рдкреЗ рд╣реБрдП рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕ рддрдХрдиреАрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдБ рдФрд░ рдкрдврд╝реЗрдВред


рдкрд┐рдЫрд▓реА рд╢рд╛рдЦрд╛ рдХрд╛ рдЬрд┐рдХреНрд░


рд╢рд╛рдЦрд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рдЖрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдЙрд╕ рд╢рд╛рдЦрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣рд╛рдЗрдлрд╝рди рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдЖрдП рдереЗред рдЗрд╕ рдЪреЗрдХрдЖрдЙрдЯ рдЯреНрд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ:


 $ gco - # git checkout - $ gm - # git merge - $ grb - # git rebase - 

.gitignore рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛рдПрдБ


рдХрд┐рд╕реА рдЕрдиреНрдп рдЕрд╡рд╛рдВрдЫрд┐рдд рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ .gitignore рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЭрдЯрдХрд╛ рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЪреБрдХреА рд╣реИред рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ( рдФрд░ рдЙрдиреНрд╣реЗрдВ рдбрд┐рд╕реНрдХ рд╕реЗ рд╣рдЯрд╛ рджреЗрдВ ), git clean рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рдЪрд╛рдмрд┐рдпрд╛рдВ рд╣реИрдВред


 $ gclean -X # git clean -Xfd 

рд╕рд╛рд╡рдзрд╛рди!


рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЖрдЧреЗ рдкрдврд╝реЗрдВред


рдХрдИ рдЯреАрдореЛрдВ рдХреЛ --dry-run рд╕реНрд╡рд┐рдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?


рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╕рдордп --dry-run рдПрд╣рддрд┐рдпрд╛рдд рдХреЗ рддреМрд░ рдкрд░ рдмрд╕ рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ рдФрд░ --dry-run рд╕реНрд╡рд┐рдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ --dry-run рд╕реВрдЪреА рджреЗрдЦреЗрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА --dry-run рдмрд┐рдирд╛ рдХрдорд╛рдВрдб --dry-run ред


рдирд┐рд╖реНрдХрд░реНрд╖


рд▓реЗрдЦ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдХрд╛рдо рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд┐рдВрджреБ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдпрд╛рдж рд░рдЦреЗрдВ 10-20 mnemonic рд╕рдВрдХреНрд╖рд┐рдкреНрддреАрдХрд░рдг рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдореВрд▓ рдЯреАрдо рдХреЛ рднреВрд▓ рдЬрд╛рдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реИред рдЙрдкрдирд╛рдореЛрдВ рдХреЛ рдорд╛рдирдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдк рдкреВрд░реА рдЯреАрдо рдХреЛ Zsh + Oh My Zsh рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЬреЛрдбрд╝реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рднреА рд╕рдорд╛рди рдЧрддрд┐ рдФрд░ рдЖрд░рд╛рдо рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдЖрдЧреЗ рдХрд╣рд╛рдБ рдЬрд╛рдирд╛ рд╣реИ?


рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реВрдВ:


  1. рдЕрдВрдд рдореЗрдВ, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ рдХрд┐ рдЧреАрдЯ рдХреЛ рдЕрдВрджрд░ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдХреНрдпреЛрдВ рдЖрдк рдЬреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
  2. рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдЖрдЬреНрдЮрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд▓рд╕реА рдордд рдмрдиреЛ: git --help рдпрд╛ ghh ред
  3. рд▓рд┐рдВрдХ рдкрд░ рдПрд▓рд┐рдпрдВрд╕ рдХреА рдкреВрд░реА рд╕реВрдЪреА рджреЗрдЦреЗрдВред рдЙрди рд╕рднреА рдХреЛ рдпрд╛рдж рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдкрд╛рдЧрд▓ рд╣реИ, рд▓реЗрдХрд┐рди рджрд┐рд▓рдЪрд╕реНрдк рдХрдорд╛рдВрдб рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред

рдХреБрдЫ рдЙрдкрдирд╛рдо рдЧреИрд░-рддреБрдЪреНрдЫ рд░реВрдк рд╕реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╕рд╛рдмрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдкреНрд░рд╕реНрддреБрдд рдЙрдкрдирд╛рдореЛрдВ рдореЗрдВ рд╕реЗ рдХрдИ рдХреЗрд╡рд▓ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЫреЛрдЯреЗ рдХрд╛рд░реНрдп рдЬреЛ рдЖрдЧреЗ рдХрд╛рдо рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЬреАрдЖрдИрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрдЦрдж рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдХрдорд┐рдЯ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реБрдЖ рд╣реИред


рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╕рд╛рдордЧреНрд░реА рдЙрдкрдпреЛрдЧреА рд╣реЛ рдЧрдИ рд╣реИ, рдФрд░ рдЖрдк рдЕрдкрдиреЗ рд▓рд┐рдП рдХреБрдЫ рдирдпрд╛ рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛ рд╢рд╛рдпрдж рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдирдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдкреЗрд╢ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВред рд╕реМрднрд╛рдЧреНрдп рд╣реИ

Source: https://habr.com/ru/post/hi420529/


All Articles