рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрдорд┐рдЯ рдХреЗ рд╕рдВрдкрд╛рджрди рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд┐рдЯ рдореЗрдВ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рд╣реЗрд▓реЛ, рд╣реЗрдмреНрд░!



рдЬреЛ рд▓реЛрдЧ Git рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рд╡реЗ git commit --amend



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



рд▓реЗрдХрд┐рди рд╕рдВрдкрд╛рджрди рдХреЗ рдЗрд╕ рддрд░реАрдХреЗ рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЛ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдЖрдк рджреВрд░рд╕реНрде рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реЛрдВ рдФрд░ рддрдм рднреА рдЕрдзрд┐рдХ рд╕рд╛рд╡рдзрд╛рдиреА рдмрд░рддреЗрдВ рдЬрдм рдЖрдк рдПрдХ рдХрдорд╛рдВрдб рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрд░реНрд╕ рдХреЛрдб рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реЛрдВред --amend



рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдЙрдкрдпреЛрдЧ рдХрд╛ рдХреНрд╖реЗрддреНрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ git push



рдХрдорд╛рдВрдб рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдХреНрд╖реЗрддреНрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред



рдЬрдм - theamend рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдХрдорд┐рдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдирдИ рдХрдорд┐рдЯ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ (рдПрдХ рдирдП рд╣реИрд╢ рдХреЗ рд╕рд╛рде), рдЬреЛ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЛ рдмрджрд▓ рджреЗрддреА рд╣реИ, рдФрд░ рд╡рд╣ рдкрд┐рдЫрд▓реА рдХрдорд┐рдЯ рд╣рд┐рд╕реНрдЯреНрд░реА рд╕реЗ рдбрд┐рд▓реАрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИред



рдпрджрд┐ рдЖрдк рдЕрдкрдиреА рдкрд╣рд▓реЗ рд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдкреНрд░рддрд┐рдмрджреНрдз ( git push



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



рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рд╕рд▓рд╛рд╣ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддреА рд╣реИрдВ : рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрдорд┐рдЯреНрд╕ рдХреЛ рдкреВрд░рд╛ рди рдХрд░реЗрдВ!



рдФрд░ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ git commit --amend



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



рдЧрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рд╣реБрдХ рдореЗрдВ рдРрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, рдЬреЛ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рддрд░рдл рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЙрддреНрдХреГрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рд╡реЗ рд╕реЗрд╡рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ .git/hooks



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



рд╡рд┐рдЪрд╛рд░ рдХрд╛ рд╕рд╛рд░ рдпрд╣ рд╣реИ:

  1. рд╣рдо git commit --amend



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


рд╕рд╛рдордЧреНрд░реА рддреИрдпрд╛рд░-рдкреНрд░рддрд┐рдмрджреНрдз-рд╕рдВрджреЗрд╢


 #!/bin/bash case "$2,$3" in commit,HEAD) #  short SHA-1      sha1_local=$(git branch -vv | \ perl -lne 'print "$1" if /\*{1}\s+\S+\s+(\w+)\s+\[(\S+)\/(\S+).*\]\s+.*/') #     (remote branch) remote_branch=$(git branch -vv | \ perl -lne 'print "$1/$2" if /\*{1}\s+\S+\s+\w+\s+\[(\S+)\/(\S+).*\]\s+.*/') #  short SHA-1      (remote branch) sha1_remote=$(git branch -rv | \ awk -v branch=$remote_branch '{ if ($1 == branch) print $2 }') if [ -n "$sha1_local" ] && [ -n "$sha1_remote" ] && [ "$sha1_local" = "$sha1_remote" ] then #   ,      #    -   ci_comment=$(cat "$1" | grep -v '#' | perl -lne 'print "# $_"') ci_autogen=$(cat "$1" | grep '#') echo -e "$ci_comment" > "$1" #    echo -e "# !      !\n" >> "$1" echo -e "$ci_autogen" >> "$1" fi ;; *) ;; esac
      
      





рдЗрд╕ рд╣реБрдХ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:







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



All Articles