Git rebase "рдмрдЯрди рдкрд░"


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

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


рдЧрд┐рдд рдкреНрд░рд╡рд╛рд╣


рдлрд┐рд▓рд╣рд╛рд▓, Git рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ Badoo рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЧрд┐рдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред


рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╢рд╛рдЦрд╛ рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рд╢рд╛рдЦрд╛ рдХреЗ рдирд╛рдо рдореЗрдВ JIRA рдореЗрдВ рдПрдХ рдЯрд┐рдХрдЯ рдирдВрдмрд░ рдФрд░ рдХрд╛рд░реНрдп рдХрд╛ рдореБрдлреНрдд рд╡рд┐рд╡рд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

BFG-9000_All_developers_should_be_given_a_years_holiday_ (рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛)

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



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



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

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




рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди


рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
1. рдЬрд┐рд╕ рд░рд┐рд▓реАрдЬ рд╢рд╛рдЦрд╛ рд╕реЗ рд╣рдо рдЯрд┐рдХрдЯ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рдореЗрдВ рджреЛ рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ рд╣реИрдВ:
2. рдмрд┐рд▓реНрдЯ-рдЗрди git рд░рд┐рдмрд╛рд╕ рдЯреВрд▓, рдЬреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдХрд╛рд░рдг рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрдкрдХреЗ рд╕рд╛рдордиреЗ рдЖрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛рдПрдВ :

1. рдЧрд┐рдЯ рд░реАрдмреЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди, рдмреНрд░рд╛рдВрдЪ рдХреЗ рд╕рднреА рдХрдореНрдмрд╛рдЗрдВрдб рдЗрдВрдЯрд░рд▓реАрд╡реНрдб рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдкреАрдЫреЗ рдХреА рддрд░рдл рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВред
2. рдпрджрд┐ рд╡рд┐рд▓рдп рдХреЗ рджреМрд░рд╛рди рдПрдХ рдорд░реНрдЬ рд╕рдВрдШрд░реНрд╖ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ Git рдЗрд╕ рд╕рдВрдШрд░реНрд╖ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдореЗрдореЛрд░реА рдореЗрдВ рдирд╣реАрдВ рдмрдЪрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП, рдЬрдм рдЧрд┐рдЯ рд░реАрдмреЗрд╕ рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореИрдиреБрдЕрд▓ рдореЛрдб рдореЗрдВ рдорд░реНрдЬ рдЯрдХрд░рд╛рд╡ рдХреЛ рдлрд┐рд░ рд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред
3. рдПрдХ рд╡рд┐рд╢реЗрд╖ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рд╕рдВрдШрд░реНрд╖ рджреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИрдВ:

Git рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк git rerere рдлрдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдорд░реНрдЬ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖реЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЛ рдпрд╛рдж рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдореЛрдб рдореЗрдВ рдЪрд╛рд▓реВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рддрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рджреЛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд░рд╣рдиреЗ рд╡рд╛рд▓реА рд╢рд╛рдЦрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рд▓рдЧрд╛рддрд╛рд░ рд╡рд┐рд▓рдп рдХрд░рддреА рд╣реИрдВ - рдпреЗ рд╕рдВрдШрд░реНрд╖ рдмрд┐рдирд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдпрд╛рдж рд░рдЦрддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рд╢рд╛рдЦрд╛ рд╣реИ, рдФрд░ рдЕрдЧрд░ -рдлреЛрд░реНрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЧрд┐рдЯ рдкреБрд╢ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдЧрд┐рдЯ рд░рд┐рдмреЗрд╕ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рдПрдХ рдирдпрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЯреНрд░рдВрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рд╢рд╛рдЦрд╛ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреЛрд╕реНрдЯрдлрд╝рд┐рдХреНрд╕ _r1, r2, r3 ... рдкреНрд░рддреНрдпреЗрдХ рд╕рдлрд▓ рдЧрд┐рдЯ рд░реАрдмреЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рдж рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдирдИ рд░рд┐рд▓реАрдЬрд╝ рд╢рд╛рдЦрд╛ рдХрд╛ рдЧрд┐рдЯ рдкреБрд╢ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рдВрдШрд░реНрд╖ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рд╕рдВрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред


рдЖрдЦрд┐рд░ рдореЗрдВ рд╣рдо рдХреНрдпрд╛ рдкрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ?

рд╣рдорд╛рд░реЗ рдмрдЧрдЯреНрд░реИрдХрд░ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрдЯрди рджрдмрд╛рдХрд░:
1. рдХрд╛рд░реНрдп рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд░рд┐рд▓реАрдЬрд╝ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
2. рдПрдХ рдирдИ рд░рд┐рд▓реАрдЬ рд╢рд╛рдЦрд╛ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреАред
3. рдХрд╛рд░реНрдп рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
4. рдХрд╛рд░реНрдп рдХреЛ рд░рд┐рд▓реАрдЬ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╕рднреА рд╕рд░рд▓ рдорд░реНрдЬ рд╕рдВрдШрд░реНрд╖ рд╣рд▓ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХрд┐рд╕реА рднреА рдпреЛрдЬрдирд╛ рдореЗрдВ рдЬрдЯрд┐рд▓ рдорд░реНрдЬ рд╕рдВрдШрд░реНрд╖реЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдРрд╕рд╛ рдХреЛрдИ рд╕рдВрдШрд░реНрд╖ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдбреЗрд╡рд▓рдкрд░ рдФрд░ рд░рд┐рд▓реАрдЬ рдЗрдВрдЬреАрдирд┐рдпрд░ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗред

рдореБрдЦреНрдп рдХрд╛рд░реНрдп


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

рддреЛ "рд╢рд╛рдЦрд╛ рдХреЗ рдкреНрд░рдореБрдЦ рдХреЛ рдЪрд▓рд╛рдПрдВред"

рдПрдХ рдХрдард┐рди рд╕рдВрдШрд░реНрд╖ рдореЗрдВ рд╣рдо рдЦреБрдж рдХреЛ рдЬрд┐рд╕ рд╕рдВрднрд╛рд╡рдирд╛ рд╕реЗ рджреЗрдЦреЗрдВрдЧреЗ, рд╡рд╣ рдирдЧрдгреНрдп рд╣реИ, рдпрд╛рдиреА рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ 99% рдирд┐рд╖реНрдкрд╛рджрди рдЕрдкрдиреЗ рдЖрдк рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдЖрдЗрдП рдЕрдм рдПрдХ рдЪрд░рдг-рджрд░-рдЪрд░рдг рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреНрдпрд╛ рдХрд░реЗрдЧреА (рдЙрджрд╛рд╣рд░рдг рдХреЗрд╡рд▓ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реАрдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХреЗрд╡рд▓ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ):
1. рд╣рдо рднрдВрдбрд╛рд░ рдХреЛ рд╕рд╛рдл рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд░рд┐рд▓реАрдЬ рд╢рд╛рдЦрд╛ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВред
2. рд╣рдореЗрдВ рдЙрд╕ рд╢рд╛рдЦрд╛ рдореЗрдВ рдорд░реНрдЬ рдХреЗ рд╕рд╛рде рдЯреНрд░рдВрдХ рдореЗрдВ рдКрдкрд░реА рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдорд┐рд▓рддреА рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╡рд╛рдкрд╕ рд░реЛрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдПрдХред рдпрджрд┐ рдХреЛрдИ рдкреНрд░рддрд┐рдмрджреНрдз рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рдкрд╕ рд░реЛрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред
3. рд╣рдо рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдбрд┐рдЯрд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рдЯреНрд░рдВрдХ рд╕реЗ рдорд░реНрдЬ рдХреЗ рдХрдорд┐рдЯ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЙрдиреНрд╣реЗрдВ рдЗрддрд┐рд╣рд╛рд╕ рд╕реЗ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред
4. рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдбрд┐рдЯрд░ (EDITOR) рдХреЛ рд╕реЗрдЯ рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд░рд┐рд╡рд░реНрдЯ рдХреЗ рдорд╛рд╣реМрд▓ рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдореЗрдВ рдмрдирд╛рдпрд╛ рдерд╛ред
5. рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдЧрд┐рдЯ рд░рд┐рдмреЗрд╕ -рдЖрдИрдкреА рдЪрд▓рд╛рдПрдВред рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ред
рдПрдХред рдЕрдЧрд░ 0, рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЧрдпрд╛ред рдбрд┐рд▓реАрдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЯрд╛рд╕реНрдХ рдмреНрд░рд╛рдВрдЪ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдкрд┐рдЫрд▓реЗ рдХрдорд┐рдЯреНрд╕ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░рдг 2 рдкрд░ рдЬрд╛рдПрдВред
bред рдпрджрд┐ 0 рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рд╕рдВрдШрд░реНрд╖ рдЙрддреНрдкрдиреНрди рд╣реБрдЖ рд╣реИред рд╣рдо рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ:
рдореИрдВред рд╣рдореЗрдВ рдЙрд╕ рдХрдорд┐рдЯ рдХрд╛ рд╣реИрд╢ рдпрд╛рдж рд╣реИ рдЬреЛ рдереЛрдкрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛ред
рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ .it / rebase-merge / рд░реЛрдХрд╛-рд╢рд╛
iiред рд╣рдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдмреЗрд╕ рдХрдорд╛рдВрдб рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИред
1. рдпрджрд┐ Git рд╣рдореЗрдВ "CONFLICT (рд╕рд╛рдордЧреНрд░реА): рдорд░реНрдЬ рд╕рдВрдШрд░реНрд╖" рдмрддрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕ рдлрд╛рдЗрд▓ рдХреА рддреБрд▓рдирд╛ рдбрд┐рд▓реАрдЯ рдХрд┐рдП рдЧрдП рдкрд┐рдЫрд▓реЗ рд╕рдВрд╢реЛрдзрди рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдпрд╣ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ (рдлрд╛рдЗрд▓ рдХрдорд┐рдЯ рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓реА рдЧрдИ рд╣реИ), рддреЛ рд╣рдо рдмрд╕ рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ рдмрд┐рд▓реНрдб рдмреНрд░рд╛рдВрдЪ рдХреЗ рдкреНрд░рдореБрдЦ рдФрд░ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдЕрд▓рдЧ рд╣реИ, рддреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ, рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдВрдШрд░реНрд╖ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред
2. рдЕрдЧрд░ Git рдХрд╣рддрд╛ рд╣реИ "рдШрд╛рддрдХ: рдХрдорд┐рдЯ рдПрдХ рдорд░реНрдЬ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ", рддреЛ рдмрд╕ --continue рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рджреЛрд╣рд░рд╛рдПрдВред рдорд░реНрдЬ рдХрдореЗрдЯреА рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢рд╛рдЦрд╛ рдХреЗ рдкреНрд░рдореБрдЦ рдореЗрдВ рдЦреАрдВрдЪ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЗрд╕ рд╡рд┐рд▓рдп рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред
3. рдЕрдЧрд░ Git рдХрд╣рддрд╛ рд╣реИ "рддреНрд░реБрдЯрд┐: рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрд╛ ... рдЬрдм рдЖрдкрдиреЗ" git rebase --continue "рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП git рд╕реНрдЯреЗрдЯрд╕ рдХрд░реЗрдВред рдпрджрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╕реНрдЯреЗрдЯрд╕ рдлрд╝рд╛рдЗрд▓ рдЙрд╕ рдХрдорд┐рдЯ рдореЗрдВ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╡рд╛рдкрд╕ рд▓рд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХрдорд┐рдЯ (рд░рд┐рдмреЗрд╕ -рд╕реНрдХрд╛рдЗрдк) рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЪрд░рдг рел.рем рдореЗрдВ рдпрд╛рдж рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЙрдЧ рдХреЛ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ рддрд╛рдХрд┐ рд░рд┐рд▓реАрдЬ рдЗрдВрдЬреАрдирд┐рдпрд░ рдЗрд╕реЗ рджреЗрдЦ рд╕рдХреЗ рдФрд░ рдпрд╣ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХреЗ рдХрд┐ рдХрд┐рд╕реА рдХреА рдЬрд░реВрд░рдд рд╣реИ рдкреНрд░рддрд┐рдмрджреНрдз рдпрд╛ рдирд╣реАрдВред
4. рдпрджрд┐ рдЙрдкрд░реЛрдХреНрдд рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ рдФрд░ рдХрд╣реЗрдВ рдХрд┐ рдХреБрдЫ рдЕрдХреНрд╖рдореНрдп рд╣реЛ рдЧрдпрд╛ рд╣реИред
6. рдЪрд░рдг 5 рдХреЛ рддрдм рддрдХ рджреЛрд╣рд░рд╛рдПрдВ рдЬрдм рддрдХ рдХрд┐ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХрд╛ рдХреЛрдб 0 рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рджрд┐рдЦрд╛рдИ рди рджреЗ, рдпрд╛ рд▓реВрдкрд┐рдВрдЧ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд▓реВрдк рдореЗрдВ рдХрд╛рдЙрдВрдЯрд░> 5 рдирд╣реАрдВ рд╣реИред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб
/** *     ,     . *   . */ function runBuildRevert($args) { if (count($args) != 2) { $this->commandUsage("<build-name> <ticket-key>"); return $this->error("Unknown build!");; } $build_name = array_shift($args); $ticket_key = array_shift($args); $build = $this->Deploy->buildForNameOrBranch($build_name); if (!$build) return false; if ($this->directSystem("git reset --hard && git clean -fdx")) { return $this->error("Can't clean directory!"); } if ($this->directSystem("git fetch")) { return $this->error("Can't fetch from origin!"); } if ($this->directSystem("git checkout " . $build['branch_name'])) { return $this->error("Can't checkout build branch!"); } if ($this->directSystem("git pull origin " . $build['branch_name'])) { return $this->error("Can't pull build branch!"); } $commit = $this->_getTopBranchToBuildMergeCommit($build['branch_name'], $ticket_key); $in_stream_count = 0; while (!empty($commit)) { $in_stream_count += 1; if ($in_stream_count >= 5) return $this->error("Seems rebase went to infinite loop!"); $editor = $this->_generateEditor($build['branch_name'], $ticket_key); $output = ''; $code = 0; $this->exec( 'git rebase -ip ' . $commit . '^^', $output, $code, false ); while ($code) { $output = implode("\n", $output); $conflicts_result = $this->_resolveRevertConflicts($output, $build['branch_name'], $commit); if (self::FLAG_REBASE_STOP !== $conflicts_result) { $command = '--continue'; if (self::FLAG_REBASE_SKIP === $conflicts_result) { $command = '--skip'; } $output = ''; $code = 0; $this->exec( 'git rebase ' . $command, $output, $code, false ); } else { unlink($editor); return $this->error("Giving up, can't resolve conflicts! Do it manually.. Output was:\n" . var_export($output, 1)); } } unlink($editor); $commit = $this->_getTopBranchToBuildMergeCommit($build['branch_name'], $ticket_key); } if (empty($in_stream_count)) return $this->error("Can't find ticket merge in branchdiff with master!"); return true; } protected function _resolveRevertConflicts($output, $build_branch, $commit) { $res = self::FLAG_REBASE_STOP; $stopped_sha = trim(file_get_contents('.git/rebase-merge/stopped-sha')); if (preg_match_all('/^CONFLICT\s\(content\)\:\sMerge\sconflict\sin\s(.*)$/m', $output, $m)) { $conflicting_files = $m[1]; foreach ($conflicting_files as $file) { $output = ''; $this->exec( 'git diff ' . $commit . '..' . $commit . '^ -- ' . $file, $output ); if (empty($output)) { $this->exec('git show ' . $build_branch . ':' . $file . ' > ' . $file); $this->exec('git add ' . $file); $res = self::FLAG_REBASE_CONTINUE; } else { return $this->error("Can't resolve conflict, because file was changed in reverting branch!"); } } } elseif (preg_match('/fatal\:\sCommit\s' . $stopped_sha . '\sis\sa\smerge\sbut\sno\s\-m\soption\swas\sgiven/m', $output)) { $res = self::FLAG_REBASE_CONTINUE; } elseif (preg_match('/error\:\scould\snot\sapply.*When\syou\shave\sresolved\sthis\sproblem\srun\s"git\srebase\s\-\-continue"/sm', $output)) { $files_status = ''; $this->exec( 'git status -s|awk \'{print $2;}\'', $files_status ); foreach ($files_status as $file) { $diff_in_reverting = ''; $this->exec( 'git diff ' . $commit . '..' . $commit . '^ -- ' . $file, $diff_in_reverting ); if (!empty($diff_in_reverting)) { $this->warning("Skipping commit " . $stopped_sha . " because it touches files we are reverting!"); $res = self::FLAG_REBASE_SKIP; break; } } } return $res; } protected function _getTopBranchToBuildMergeCommit($build_branch, $ticket) { $commit = ''; $this->exec( 'git log ' . $build_branch . ' ^origin/master --merges --grep ' . $ticket . ' -1 --pretty=format:%H', $commit ); return array_shift($commit); } protected function _generateEditor($build_branch, $ticket, array $exclude_commits = array()) { $filename = PHPWEB_PATH_TEMPORARY . uniqid($build_branch) . '.php'; $content = <<<'CODE' #!/local/php5/bin/php <?php $build = '%s'; $ticket = '%s'; $commits = %s; $file = $_SERVER['argv'][1]; if (!empty($file)) { $content = file_get_contents($file); $build = preg_replace('/_r\d+$/', '', $build); $new = preg_replace('/^.*Merge.*branch.*' . $ticket . '.*into\s' . $build . '.*$/m', '', $content); foreach ($commits as $exclude) { $new = preg_replace('/^.*' . preg_quote($exclude, '/') . '$/m', '', $new); } file_put_contents($file, $new); } CODE; $content = sprintf($content, $build_branch, $ticket, var_export($exclude_commits, 1)); file_put_contents($filename, $content); $this->exec('chmod +x ' . $filename); putenv("EDITOR=" . $filename); return $filename; } 



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


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

рдЗрд▓реНрдпрд╛ рдЖрдпреБрд╡ , рдХреНрдпреВрдП рд▓реАрдб рдФрд░ рд╡реНрд▓рд╛рджрд┐рд╕реНрд▓рд╛рд╡ рдЪреЗрд░реНрдиреЛрд╡ , рд░рд┐рд▓реАрдЬ рдЗрдВрдЬреАрдирд┐рдпрд░

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


All Articles