рдЬреАрдЖрдИрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП (рд╕рд╛рде рд╣реА рдЧрд╣рд░реА рд╡рд┐рд╕рд░реНрдЬрди рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЪрдпрди)


Surrealistguitarist рджреНрд╡рд╛рд░рд╛ рдбреНрд░реЗрдЧрди II рдХрд╛ рдкреЗрдбрд╝

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

рд▓рдЧрднрдЧ 15 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЧрд┐рдЯ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рдЗрд╕ рд╕рдордп рдХреЗ рджреМрд░рд╛рди, рд╡рд╣ рдПрдХ рдЕрдЬреЗрдп рдЪреИрдВрдкрд┐рдпрди рдХреЗ рд▓рд┐рдП рдПрдХ рджрд▓рд┐рдд рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рдЧрдпрд╛ред рдЖрдЬ, рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдЕрдХреНрд╕рд░ рдПрдХ рдЯреАрдо рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВ git initред рдирд┐рд╕реНрд╕рдВрджреЗрд╣, рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЙрдкрдХрд░рдг рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╣рдо рдореЗрдВ рд╕реЗ рдХрдИ рджреИрдирд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рдпрд╣ рдЬрд╛рджреВ - рдЙрдЬреНрдЬреНрд╡рд▓, рд▓реЗрдХрд┐рди рдЦрддрд░рдирд╛рдХ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред

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

рд╣рдо рдЪреАрдЬреЛрдВ рдХреЛ рдХреНрд░рдо рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ


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

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

рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рддрд┐рдерд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдВ


рддрд┐рдерд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЫрдВрдЯрдиреА рдЖрдкрдХреА рд╕рднреА рд╕реНрдерд╛рдиреАрдп рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рджрд┐рдЦрд╛рддреА рд╣реИ, рдЬреЛ рдЖрдЦрд┐рд░реА рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рдмрд╣реБрдд рдЖрдо рдмрд╛рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдореБрдЭреЗ рдХрдИ рдмрд╛рд░ рдорджрдж рдХреА:

# To sort branches by commit date
git branch --sort=-committerdate

рдкрд┐рдЫрд▓рд╛ рдзрд╛рдЧрд╛


рдпрджрд┐ рдЖрдк рдкреНрд░рддрд┐рдмрджреНрдз рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рд╢рд╛рдЦрд╛ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдкрд┐рдЫрд▓реЗ рдПрдХ рдкрд░ рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдЖрдк рд╢рд╛рдпрдж рдЗрд╕реЗ рд╢рд╛рдЦрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдирд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдкрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдпрд╣ рдПрдХ рд╢рд╛рдЦрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ detached HEADрд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИ?

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣реИ:

# Checkout previous branch
git checkout -

рдСрдкрд░реЗрдЯрд░ -рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реЙрд░реНрдЯрд╣реИрдВрдб @{-1}рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЪреЗрдХрдЖрдЙрдЯ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдиреЗ рдПрдХ рд╢рд╛рдЦрд╛ рдмрдирд╛рдИ feature/thing-a, рдлрд┐рд░ feature/thing-b, рдФрд░ рдлрд┐рд░ bugfix/thing-c, рдкреИрд░рд╛рдореАрдЯрд░ @{-2}рдЖрдкрдХреЛ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛ рджреЗрдЧрд╛ feature/thing-a:

# Checkout branch N number of checkouts ago
git checkout @{-N}

рд╕рднреА рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рдПрдВ


рдзреНрд╡рдЬ vрдЕрдВрддрд┐рдо рдкреНрд░рддрд┐рдмрджреНрдз рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдФрд░ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рд╕рднреА рд╢рд╛рдЦрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдбрдмрд▓ vvрдЗрдЪреНрдЫрд╛ рднреА рджреВрд░рджрд░рд╛рдЬ рдХреЗ рдирджреА рдХреЗ рдКрдкрд░ рд╢рд╛рдЦрд╛рдУрдВ, рд╕реНрдерд╛рдиреАрдп рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рдмрд╛рдж рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ:

# List branches along with commit ID, commit message and remote
git branch -vv

рдлрд╝рд╛рдЗрд▓ рдвреВрдВрдвреЗ


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

рд╡рд┐рдзрд┐ рдереЛрдбрд╝реА рдЕрдЬреАрдм рд╣реИ, рдЬреЛ git checkout -рдЖрдкрдХреЛ рдкрд┐рдЫрд▓реА рд╢рд╛рдЦрд╛ рдореЗрдВ рд▓реЗ рдЬрд╛рддреА рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрджрд┐ рдЖрдк --рдЪреЗрдХрдЖрдЙрдЯ рдореЗрдВ рд╢рд╛рдЦрд╛ рдХреЗ рдирд╛рдо рдХреЗ рдмрд╛рдж рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдкрдХреЛ рдЙрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЬрд┐рд╕реЗ рдЖрдк рдЦреЛрдЬ рд░рд╣реЗ рд╣реИрдВред рдЖрдкрдиреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрдХреЗрдд рдХреЗ рдРрд╕реЗ рдХрд╛рд░реНрдп рдХрд╛ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ:

git checkout feature/my-other-branch -- thefile.txt

рд╕реНрдкрд╖реНрдЯ рд╕реНрдерд┐рддрд┐


рдЯреЙрдорд╕ рд▓реИрдХреЛрдорд╛ рдиреЗgit status рдЭрдВрдбреЗ рдХреА рдорджрдж рд╕реЗ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯреНрд╡реАрдЯ рдХрд┐рдпрд╛-sb рдФрд░ рдХрд╣рд╛: "рдХрдИ рд╕рд╛рд▓реЛрдВ рд╕реЗ рдореИрдВ рдЧрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдиреЗ рднреА рдореБрдЭреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдмрддрд╛рдпрд╛ред" рдпрд╣ рд╕рд┐рд░реНрдл рдЦреЛрдИ рд╣реБрдИ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдРрд╕реЗ рд╕рдордп рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рд░рд▓ рдХрд░рдирд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред

рдЕрдзрд┐рдХрд╛рдВрд╢ Git рдХрдорд╛рдВрдбреНрд╕ рдореЗрдВ рдпреЗ рдЭрдВрдбреЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

# Usually we would use git status to check what files have changed
git status

# Outputs:
On branch master
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: README.md

Untracked files:
(use "git add <file>..." to include in what will be committed)

another-file
my-new-file

# Using the flags -sb we can shorten the output
git status -sb

# Outputs:
## master
M README.md
?? another-file
?? my-new-file

рдкреВрд░реА рдХрд╣рд╛рдиреА


рдРрд╕реЗ рд╕рдордп рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдХреБрдЫ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд▓рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдиреЗ рдЧрд▓рддреА рд╕реЗ рдордВрдЪрди (рдкреНрд░рд╛рд░рдВрднрд┐рдХ) рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред рдпрджрд┐ рдпрд╣ git logрдЖрдкрдХреЛ рдкрд┐рдЫрд▓реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реМрдЯрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЙрдкрд░реЛрдХреНрдд рд╕реБрдЭрд╛рд╡реЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╣реИ git reflogред

Git рдореЗрдВ рдЖрдкрдХреЗ рд╕рднреА рдХрд╛рд░реНрдп рдЬреЛ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ HEAD@{}(рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП push/pull/branch/checkout/commit) рд░рд┐рдлреНрд▓реЙрдЧ (рд╕рдВрджрд░реНрдн рд▓реЙрдЧ) рдореЗрдВ рдЖрддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдЖрдкрдХреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреА рдХрд╣рд╛рдиреА рд╣реИ, рдЪрд╛рд╣реЗ рдЖрдк рдХрд┐рд╕ рд╢рд╛рдЦрд╛ рдореЗрдВ рд╣реЛрдВред рдпрд╣ рд╡рд╣ рдЕрдВрддрд░ рд╣реИ git log, рдЬреЛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╢рд╛рдЦрд╛ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред


рдЖрдк git showрдкреНрд░рддрд┐рдмрджреНрдз рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдк рдвреВрдВрдв рд░рд╣реЗ рдереЗ, рддреЛ рдпрд╣ git checkoutрдЖрдкрдХреЛ рд╡рд╛рдВрдЫрд┐рдд рд╢рд╛рдЦрд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджреЗрдЧрд╛ рдпрд╛ рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рднреА рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

# See the reference log of your activity
git reflog --all

# Look at the HEAD at given point from reflog
git show HEAD@{2}

# Checkout the HEAD, to get back to that point
git checkout HEAD@{2}

Prep рдлрд╝рд╛рдЗрд▓реЗрдВ рдЬреЛ рдХрдорд┐рдЯ рдХрд░рдиреЗ рд╕реЗ рдЪреВрдХ рдЧрдИрдВ


рдЪрд░рдо рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрджрд┐ рдпрд╣ git reflogрдЖрдкрдХреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рд▓рд╛рдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдиреЗ рдордзреНрдпрд╡рд░реНрддреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╣рд╛рд░реНрдб рд░реАрд╕реЗрдЯ рдЪрд▓рд╛рдпрд╛), рддреЛ рдПрдХ рдФрд░ рдЪрд╛рд▓ рд╣реИред

рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЙрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдЕрдВрджрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ .git/objectsрд╣реИ рдЬреЛ рд╕рдХреНрд░рд┐рдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рднрд░реЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ Git рдХрдорд╛рдВрдб рд╣реИ git fsck, рдЬрд┐рд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЕрдЦрдВрдбрддрд╛ (рдХреНрд╖рддрд┐рдЧреНрд░рд╕реНрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐) рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕ рдЭрдВрдбреЗ рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ --lost-found, рдЬреЛ рдЙрди рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдХрдорд┐рдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдРрд╕реА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ "рд▓рдЯрдХрддреА рд╣реБрдИ рдмреВрдБрдж" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рдХрдорд╛рдВрдб рдЖрдкрдХреЛ "рд╣реИрдВрдЧрд┐рдВрдЧ рдЯреНрд░реА" рдФрд░ "рд╣реИрдВрдЧрд┐рдВрдЧ рдХрдорд┐рдЯ" рдЦреЛрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ --dangling, рд▓реЗрдХрд┐рди рд▓рд╛рдн--lost-foundрдЙрд╕ рдореЗрдВ рдпрд╣ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ .git/lost-foundред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдПрдХ рд╕рдХреНрд░рд┐рдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕реА рдХрдИ "рдлрд╛рдВрд╕реА" рдлрд╛рдЗрд▓реЗрдВ рд╣реЛрдВрдЧреАред рдЧрд┐рдЯ рдореЗрдВ рдПрдХ рдХрдЪрд░рд╛ рдирд┐рдкрдЯрд╛рди рдХрдорд╛рди рд╣реИ рдЬреЛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЪрд▓рддреА рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛ рджреЗрддреА рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ --lost-foundрд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдФрд░ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп / рддрд╛рд░реАрдЦ рдХреЛ рджрд┐рдЦрд╛рдПрдЧрд╛, рдЬреЛ рдЦреЛрдЬ рдХреЛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдЕрднреА рднреА рдЕрд▓рдЧ рд╣реЛрдЧреА, рдЕрд░реНрдерд╛рдд, рдЖрдк рдЪреЗрдХрдЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдирд╛рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ (рд╣реИрд╢), рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдерд╛рди рдкрд░ рдХреЙрдкреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

# This will find any change that was staged but is not attached to the git tree
git fsck --lost-found

# See the dates of the files
ls -lah .git/lost-found/other/

# Copy the relevant files to where you want them, for example:
cp .git/lost-found/other/73f60804ac20d5e417783a324517eba600976d30 index.html

рдЯреАрдо рд╡рд░реНрдХ рдореЗрдВ рдЬреАрдЖрдИрдЯреА


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

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

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

рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИ


рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╡рд┐рдВрдбреЛрдЬ рдбреЙрд╕ рд▓рд╛рдЗрди рдПрдВрдбрд┐рдВрдЧреНрд╕ \r\n(CRLF) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ , рдЬрдмрдХрд┐ рдореИрдХ рдФрд░ рд▓рд┐рдирдХреНрд╕ рдпреВрдирд┐рдХреНрд╕ рд▓рд╛рдЗрди рдПрдВрдбрд┐рдВрдЧреНрд╕ \n(LF) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдореИрдХ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг \r(CR) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдЯреАрдо рдмрдврд╝рддреА рд╣реИ, рдЕрд╕рдВрдЧрдд рд▓рд╛рдЗрди рдПрдВрдбрд┐рдВрдЧ рдХреА рд╕рдорд╕реНрдпрд╛ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рд▓рдЧрддреА рд╣реИред рдпрд╣ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд╡реЗ (рдЖрдорддреМрд░ рдкрд░) рдХреЛрдб рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдХрд╛рд░рдг, рдХрдорд┐рдЯ рдФрд░ рдкреВрд▓ рдЕрдиреБрд░реЛрдз рд╡рд┐рднрд┐рдиреНрди рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред рдЕрдХреНрд╕рд░ рд▓реЛрдЧ рдЙрдиреНрд╣реЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдЧрд▓рдд рд▓рд╛рдЗрди рдПрдВрдбрд┐рдВрдЧ рдХреЛ рдмрджрд▓рдирд╛ рдФрд░ рдШреВрдордирд╛ рдХрд╛рдлреА рддрдХрд▓реАрдлрджреЗрд╣ рд╣реЛрддрд╛ рд╣реИред

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

# This will let you configure line-endings on an individual basis
git config core.eol lf
git config core.autocrlf input

рдмреЗрд╢рдХ, рдЖрдкрдХреЛ рдЗрд╕ рд╕рдореНрдореЗрд▓рди рдФрд░ рдПрдХ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрди рдЕрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рднреВрд▓рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдкреВрд░реА рдЯреАрдо рдХреЗ рд▓рд┐рдП рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ? рдСрдкрд░реЗрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░, Git .git / config рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд┐рд╕реНрдЯрдо-рд╡рд╛рдЗрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА ~/.gitconfigрдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ /etc/gitconfigред

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

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

# Adding this to your .gitattributes file will make it so all files
# are checked in using UNIX line endings while letting anyone on the team
# edit files using their local operating systemтАЩs default line endings.
* text=auto

рд╕реНрд╡рддрдГ рдЫрд┐рдкрдирд╛


рдпрд╣ рд╕рдВрдХрд▓рд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ (рдЬреИрд╕реЗ node_modules/) рдХреЛ .gitignore рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдерд╛рдЧрдд рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрдВ рдФрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЕрдкрд▓реЛрдб рди рд╣реЛрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрднреА-рдХрднреА рдЖрдк рдЕрднреА рднреА рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреВрд▓ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ (рдХрдо рд╕реЗ рдХрдо GitHub рдкрд░), рдЖрдк .ITattributes рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдкрде рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ linguist-generatedрдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ .itattributes рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реИред рдпрд╣ рдкреВрд▓ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЫрд┐рдкрд╛рдПрдЧрд╛ред рдЙрдиреНрд╣реЗрдВ "рдиреНрдпреВрдирддрдо" рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛: рдЖрдк рдЕрднреА рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рддрдереНрдп рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреВрд░реНрдг рдХреЛрдб рдХреЗ рдмрд┐рдирд╛ред

рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рддрдирд╛рд╡ рдФрд░ рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рднрд╛рд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬ рдЗрд╕рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддреА рд╣реИ рдФрд░ рд╕рдордп рдХрдо рдХрд░рддреА рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рднрдВрдбрд╛рд░ рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рдлрд╝рд╛рдЗрд▓реЗрдВ (рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐) рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдмрд╛рдж рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдФрд░ рдЯреНрд░реИрдХ рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:

*.asset linguist-generated

рдЧрд┐рдЯ рджреЛрд╖ рдХрд╛ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ


рд╣реИрд░реА рд░реЙрдмрд░реНрдЯреНрд╕ рдХрд╛ рд▓реЗрдЦ "рд▓рд┐рдЯрд┐рд▓ рдерд┐рдВрдЧреНрд╕ рдЖрдИ рд▓рд╛рдЗрдХ рдЯреВ рдбреВ рд╡рд┐рдж рдЧрд┐рдЯ" рдЗрд╕ рдЯреАрдо рдХреЛ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╣рд╕реВрд╕ git blameрдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдирд╛рдо git praise(рдЕрдиреБрд╡рд╛рдж "рдЕрдВрдЧреНрд░реЗрдЬреА" рд╕реЗ рдЕрдиреБрд╡рд╛рдж ) рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдирд╛рдо рдмрджрд▓рдиреЗ рд╕реЗ рдЯреАрдо рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рднреА рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рд╣реЛрддреА рд╣реИ git blame, рддреЛ рд╣рд░ рдХреЛрдИ рддрдирд╛рд╡рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореИрдВ рднреА рдХрд░рддрд╛ рд╣реВрдВред рджреЛрд╖ (рдЕрдкрд░рд╛рдз) рд╢рдмреНрдж рдХреЛ рдХреБрдЫ рдирдХрд╛рд░рд╛рддреНрдордХ рдорд╛рдирдирд╛ тАЛтАЛрд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИ ... рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд▓рдд рд╣реИ!

рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдлрд╝рдВрдХреНрд╢рди git blame (рдпрд╛ git praise, рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ) рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЕрдВрддрд┐рдо рдХреМрди рдерд╛ред рд╣рдо рдЙрд╕реЗ рджреЛрд╖ рджреЗрдиреЗ рдпрд╛ рдЙрд╕рдХреА рдкреНрд░рд╢рдВрд╕рд╛ рдХрд░рдиреЗ рдирд╣реАрдВ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╕рд┐рд░реНрдл рд╕реНрдерд┐рддрд┐ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдкреНрд░рд╢реНрди рдкреВрдЫрдирд╛ рд╣реИ рдФрд░ рдХрд┐рд╕рд╕реЗ, рдЬреЛ рд╕рдордп рдмрдЪрд╛рддрд╛ рд╣реИред

рдЗрд╕реЗ git blameрди рдХреЗрд╡рд▓ рдХреБрдЫ рдЕрдЪреНрдЫреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП , рдмрд▓реНрдХрд┐ рд╕рдВрдЪрд╛рд░ рдХреЗ рдПрдХ рд╕рд╛рдзрди рдХреЗ рд░реВрдк рдореЗрдВ рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдкреВрд░реА рдЯреАрдо рдХреЛ рдЕрд░рд╛рдЬрдХрддрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдордп рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рдХреНрдпрд╛ рдЬрд╛рдирддрд╛ рд╣реИред рдХреБрдЫ IDE, рдЬреИрд╕реЗ Visual Studio, рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдХреНрд░рд┐рдп рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП, рдЖрдк рддреБрд░рдВрдд рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдВрддрд┐рдо рдХрд┐рд╕рдиреЗ рдЗрд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ (рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рд╣реИ)ред

рд▓рд╛рдкрддрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдирд╛рд▓реЙрдЧ рдЧрд┐рдЯ рджреЛрд╖


рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рд╣рдорд╛рд░реА рдЯреАрдо рдХреЗ рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдиреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдХрд┐рд╕рдиреЗ, рдХрдм рдФрд░ рдХреНрдпреЛрдВ рдПрдХ рдлрд╛рдЗрд▓ рдХреЛ рдбрд┐рд▓реАрдЯ рдХрд┐рдпрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдпрд╣рд╛рдБ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ git blame, рд▓реЗрдХрд┐рди рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдореМрдЬреВрдж рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдЧрд╛рдпрдм рд╣реИ рддреЛ рдмреЗрдХрд╛рд░ рд╣реИред

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

# By using -- for a specific file,
# git log can find logs for files that were deleted in past commits
git log -- missing_file.txt

рд╕рдВрджреЗрд╢ рдЯреЗрдореНрдкрд▓реЗрдЯ рддреИрдпрд╛рд░ рдХрд░реЗрдВ


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

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

# This sets the commit template to the file given,
# this needs to be run for each contributor to the repository.
git config commit.template ./template-file

рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдкрдХрдбрд╝


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

рдЧрд┐рдЯ рд╣реБрдХ


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

рдореИрдиреБрдЕрд▓ рдСрдЯреЛрдореЗрд╢рди


Git рдореЗрдВ рдкреНрд░рдореБрдЦ рд╕реНрд╡рдЪрд╛рд▓рди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ git bisect рд╣реИред рдмрд╣реБрддреЛрдВ рдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдХрдо рд▓реЛрдЧ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд▓рдмреНрдмреЛрд▓реБрдЖрдм рдпрд╣ рд╣реИ рдХрд┐ Git рдЯреНрд░реА (рдХрдорд┐рдЯ рд╣рд┐рд╕реНрдЯреНрд░реА) рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдпрд╣ рдЦреЛрдЬ рд░рд╣рд╛ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХрд╣рд╛рдБ рджрд░реНрдЬ рдХреА рдЧрдИ рд╣реИред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣рд╛рде рд╕реЗ рд╣реИред рдЖрдк рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ git bisect start, рдЕрдЪреНрдЫреЗ рдФрд░ рдмреБрд░реЗ рдХрдорд┐рдЯреНрд╕ (рдЬрд╣рд╛рдВ рдХреЛрдИ рдмрдЧ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЬрд╣рд╛рдВ рдмрдЧ рд╣реИ) рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдХрдорд┐рдЯ рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ git bisect goodрдпрд╛ git bisect badрдХрд░реЗрдВред

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

# Begin the bisect
git bisect start

# Tell git which commit does not have the bug
git bisect good c5ba734

# Tell git which commit does have the bug
git bisect bad 6c093f4

# Here, do your test for the bug.
# This could be running a script, doing a journey on a website, unit test etc.

# If the current commit has bug:
git bisect bad

# If the current commit does not have the bug
git bisect good

# This will repeat until it finds the first commit with the bug
# To exit the bisect, either:

# Go back to original branch:
git bisect reset

# Or stick with current HEAD
git bisect reset HEAD

# Or you can exit the bisect at a specific commit
git bisect reset <commit ID>

рдЪрд▓ рд░рд╣рд╛ рд╣реИ: рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рд╕реНрд╡рдЪрд╛рд▓рди


рдЕрдкрдиреА рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдбрд┐рдмрдЧрд┐рдВрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ, рд╕реНрдЯреБрдЕрд░реНрдЯ рд╣рд▓реНрд▓реЛрд╡реЗ рдиреЗgit bisect рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдпрд╛ ред
рд╡рд╣ рдХреНрд▓реВрдЬреНрдпреЛрд░ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЙрд╕рдХреА рдмрд╛рдд рд╕реЗ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рднрд╛рд╖рд╛ рдХреЛ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред

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

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

рддреЛ рд╣рдо рдХреИрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВgit bisect? рдЖрдк рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рддрд┐рдмрджреНрдз рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдЖрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдмрд╛рдИрд╕реЗрдХреНрдЯ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдкрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдорд╛рдВрдб рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдПрдЧрд╛ред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛ рдпрд╛ рдкрд░реАрдХреНрд╖рдг (рдореЙрдбреНрдпреВрд▓рд░, рдХрд╛рд░реНрдпрд╛рддреНрдордХ, рдПрдХреАрдХрд░рдг, рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░реАрдХреНрд╖рдг) рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдк рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддрд┐рдЧрдорди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкрд┐рдЫрд▓реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдкрд░ рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЪрд▓рд╛рдПрдВ:

# Begin the bisect
git bisect start

# Tell git which commit does not have the bug
git bisect good c5ba734

# Tell git which commit does have the bug
git bisect bad 6c093f4

# Tell git to run a specific script on each commit
# For example you could run a specific script:
git bisect run ./test-bug

# Or use a test runner
git bisect run jest

рд╣рд░ рдЕрддреАрдд рдХреА рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдкрд░


рддрд╛рдХрдд git bisectрдореЗрдВ рд╕реЗ рдПрдХ рдЗрддрд┐рд╣рд╛рд╕ рдореЗрдВ рдЧреИрд░-рд░реИрдЦрд┐рдХ рддрд░реАрдХреЗ рд╕реЗ рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдирд░реА рдЦреЛрдЬ рдХрд╛ рдкреНрд░рднрд╛рд╡реА рдЙрдкрдпреЛрдЧ рд╣реИред рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдПрдХ рд░реИрдЦрд┐рдХ рдмрд╛рдИрдкрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЖрдк рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣рд░ рдХрдорд┐рдЯ рдкрд░ рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧрд┐рдЯ рд▓реЙрдЧ рдФрд░ рд╕рд╛рдЗрдХрд▓ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рджреЛрд╕реНрдд рд╣реИ, рдЬреЛ рдЗрд╕реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд░реЗрдЧрд╛ git rebase:ред

рдХрд╛рдорд░рд╛рди рдЕрд╣рдордж рдиреЗ рдПрдХ рдЯреНрд╡реАрдЯ рдореЗрдВ рд▓рд┐рдЦрд╛ rebaseрд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдХрдорд┐рдЯрдореЗрдВрдЯ рдЯреЗрд╕реНрдЯ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рддрд╛:

рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкреНрд░рддрд┐рдмрджреНрдз рдЦреЛрдЬреЗрдВ:

$ git rebase -i --exec "yarn test" d294ae9

рдХрдорд╛рдВрдб d294ae9 рдФрд░ HEAD рдХреЗ рдмреАрдЪ рд╕рднреА рдХрдорд╛рдиреЛрдВ рдкрд░ рдпрд╛рд░реНрди рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддрд╛ рд╣реИ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдХреНрд░реИрд╢ рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИред

рд╣рдордиреЗ git bisectрдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╣реА рд╡рд┐рдЪрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ , рдЬреЛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рдПрдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИрдВред

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

# This will run for every commit between current and the given commit ID
git rebase -i --exec ./my-script

рд▓реЗрдЦ рдФрд░ рдореИрдиреБрдЕрд▓ рдХрд╛ рдЪрдпрди рдЖрдкрдХреЛ Git рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП


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

  1. рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдЧрд┐рдЯ ред рдПрдХ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╕рд╛рдЗрдЯ рдЬреЛ рдЖрдкрдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
  2. рдбрд╛рдВрдЧ рдЗрдЯ рдЧрд┐рдЯ! ред рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рд╣рдо рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ Git рдореЗрдВ рдЦреЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрд┐рд╕реА рднреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред рдпрд╣ рд╕рд╛рдЗрдЯ рд╕рдмрд╕реЗ рдЖрдо рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХрдИ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред
  3. рдкреНрд░реЛ рдЧрд┐рдЯ ред рдпрд╣ рдореБрдлреНрдд рдкреБрд╕реНрддрдХ Git рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдореВрд▓реНрдп рд╕рдВрд╕рд╛рдзрди рд╣реИред
  4. Git Docs. тАФ . , Git Docs, Git (, man git-commit) Git .
  5. Thoughtbot. Git Thoughtbot .
  6. Git. Git.
  7. Git. , тАж . Git, .
  8. рдЧрд┐рдЯ: рд╢реБрд░реБрдЖрдд рд╕реЗ рдЙрдиреНрдирдд рд╕реНрддрд░ рддрдХ ред рдорд╛рдЗрдХ рд░рд┐рддрдореБрд▓реНрд▓рд░ рдиреЗ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд▓реЗрдЦ рд▓рд┐рдЦрд╛ рд╣реИ, рдЬреЛ рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рд╣реИред
  9. рдЫреЛрдЯреА рдЪреАрдЬреЗрдВ рдЬреЛ рдореБрдЭреЗ рдЧрд┐рдд рд╕реЗ рдкреНрдпрд╛рд░ рд╣реИ ред рдпрд╣ рд╣реИрд░реА рд░реЙрдмрд░реНрдЯреНрд╕ рдХрд╛ рдпрд╣ рд▓реЗрдЦ рдерд╛ рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рдХрд░рд╛рдпрд╛ рдХрд┐ рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рдмрдврд╝рддреЗ рдХреЛрдб рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧреАрдЯ рдореЗрдВ рдЕрднреА рднреА рдХрд┐рддрдиреА рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╣реИрдВред
  10. рдПрдЯрд▓рд╕рд┐рдпрди рдПрдбрд╡рд╛рдВрд╕реНрдб рдЧрд┐рдЯ рдЧрд╛рдЗрдб ред рдпреЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрдИ рд╡рд┐рд╖рдпреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рджреЗрддреЗ рд╣реИрдВред
  11. рдЧреАрдардм рдкрд░ рдЪрд┐рдЯ рдЪрд┐рдЯ ред Git рдЬреИрд╕реЗ рдЯреВрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдзреЛрдЦрд╛ рдкрддреНрд░ рд╣реЛрдирд╛ рд╣рдореЗрд╢рд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИред
  12. рдШрдЯ рдШрдЯ ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди Git рдХрдорд╛рдВрдб рдЭрдВрдбреЗ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИ рдФрд░ рдХрдИ рдЙрдкрдирд╛рдореЛрдВ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЧрдИ рд╣реИред

рд▓реЗрдХрд┐рди рдЖрдк рдФрд░ рдХреНрдпрд╛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ :

  1. Git. тДЦ1: , .git
  2. Git. тДЦ2: rebase.
  3. .

All Articles