ืฉื—ืจื•ืจ ืžืขืจื›ืช ื‘ืงืจืช ืžืงื•ืจ ืžื‘ื•ื–ืจืช Git 2.22

ืฉื”ื•ื’ืฉ ืขืœ ื™ื“ื™ ืฉื—ืจื•ืจ ืžืขืจื›ืช ื‘ืงืจืช ื”ืžืงื•ืจ ื”ืžื‘ื•ื–ืจืช ื’ื™ื˜ 2.22.0. Git ื”ื™ื ืื—ืช ืžืžืขืจื›ื•ืช ื‘ืงืจืช ื”ื’ืจืกืื•ืช ื”ืคื•ืคื•ืœืจื™ื•ืช, ื”ืืžื™ื ื•ืช ื•ื‘ืขืœื™ ื”ื‘ื™ืฆื•ืขื™ื ื”ื’ื‘ื•ื”ื™ื ื‘ื™ื•ืชืจ, ื”ืžืกืคืงืช ื›ืœื™ ืคื™ืชื•ื— ื’ืžื™ืฉื™ื ืœื ืœื™ื ืืจื™ื™ื ื”ืžื‘ื•ืกืกื™ื ืขืœ ื”ืกืชืขืคื•ืช ื•ืžื™ื–ื•ื’. ื›ื“ื™ ืœื”ื‘ื˜ื™ื— ืืช ืฉืœืžื•ืช ื”ื”ื™ืกื˜ื•ืจื™ื” ื•ื”ืชื ื’ื“ื•ืช ืœืฉื™ื ื•ื™ื™ื ืจื˜ืจื•ืืงื˜ื™ื‘ื™ื™ื, ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘-hashing ืžืจื•ืžื– ืฉืœ ื›ืœ ื”ื”ื™ืกื˜ื•ืจื™ื” ื”ืงื•ื“ืžืช ื‘ื›ืœ commit, ื•ื ื™ืชืŸ ื’ื ืœืืฉืจ ืชื’ื™ื ื•-commits ื‘ื•ื“ื“ื™ื ื‘ื—ืชื™ืžื•ืช ื“ื™ื’ื™ื˜ืœื™ื•ืช ืฉืœ ืžืคืชื—ื™ื.

ื‘ื”ืฉื•ื•ืื” ืœืžื”ื“ื•ืจื” ื”ืงื•ื“ืžืช, ื”ื’ืจืกื” ื”ื—ื“ืฉื” ื›ืœืœื” 745 ืฉื™ื ื•ื™ื™ื, ืฉื”ื•ื›ื ื• ื‘ื”ืฉืชืชืคื•ืช 74 ืžืคืชื—ื™ื, ืžืชื•ื›ื 18 ืœืงื—ื• ื—ืœืง ื‘ืคื™ืชื•ื— ืœืจืืฉื•ื ื”. ื”ืขื™ืงืจื™ ื—ื™ื“ื•ืฉื™ื:

  • ื–ืžื™ืŸ ืžืื– ื’ืจืกื” 1.18, ืžืฆื‘ ื”-commit rebase ื”ื—ื“ืฉ "git rebase --rebase-merges" ืžื—ืœื™ืฃ ืืช ื”ืืคืฉืจื•ืช ื”ื™ืฉื ื” "--preserve-merges", ืฉื›ืขืช ื”ื•ืฆืื” ืžืฉื™ืžื•ืฉ. ืคืขื•ืœืช "git rebase" ืžืฉืžืฉืช ืœื”ื—ืœืคืช ืกื“ืจื” ืฉืœ commits ื‘-commit ื‘ืกื™ืก ื—ื“ืฉ, ืœืžืฉืœ, ืœื”ืขื‘ื™ืจ ืขื ืฃ ื ืคืจื“ ืฉืžืคืชื— ืคื™ืฆ'ืจ ื—ื“ืฉ ื›ืœืฉื”ื• ืœืžืฆื‘ ื”ื ื•ื›ื—ื™ ืฉืœ ื”ืขื ืฃ ื”ืจืืฉื™, ื”ื›ื•ืœืœ ืชื™ืงื•ื ื™ื ืฉื ื•ืกืคื• ืœืื—ืจ ื”ืขื ืฃ :

    o - o - o (ื”ืชื›ื•ื ื” ืฉืœื™)

    /

    o - o - o - o - o (ืžืืกื˜ืจ)

    o - o - o (ื”ืชื›ื•ื ื” ืฉืœื™)

    /

    o - o - o - o - o (ืžืืกื˜ืจ)

    ื›ื“ื™ ืœืฉืžืจ ืืช ืžื‘ื ื” ื”ืกื ื™ืฃ ื‘ืกื ื™ืฃ ืฉื”ื•ืขื‘ืจ, ื ื™ืชืŸ ื”ื™ื” ืœื”ืฉืชืžืฉ ื‘ืขื‘ืจ ื‘ืืคืฉืจื•ืช "--preserve-merges", ืฉื›ืืฉืจ ื”ื™ื ืคื•ืขืœืช ื‘ืžืฆื‘ ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ (git rebase -i --preserve-merges), ืืคืฉืจื” ืขืจื™ื›ืช ื”ื™ืกื˜ื•ืจื™ื™ืช ื”-commit, ืืš ืœื ื”ื‘ื˜ื™ื— ืฉื™ืžื•ืจ ืžืœื ืฉืœ ืžื‘ื ื” ื”ืžืื’ืจ. ืžืฆื‘ "--rebase-merges" ื”ื—ื“ืฉ ืžืืคืฉืจ ืœืš ืœืฉืžืจ ืืช ืžื‘ื ื” ื”ืฉื™ื ื•ื™ื™ื ื‘ืกื ื™ืฃ ื”ืžื•ืขื‘ืจ, ืชื•ืš ืžืชืŸ ืžื’ื•ื•ืŸ ืฉืœื ืฉืœ ืคืขื•ืœื•ืช ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ื•ืช, ื›ื•ืœืœ ืžื—ื™ืงื”, ืงื™ื‘ื•ืฅ ืžื—ื“ืฉ ื•ืฉื™ื ื•ื™ ืฉืžื•ืช ืฉืœ commits.

    ืœื“ื•ื’ืžื”, "--rebase-merges" ื”ื™ื ืžืืคืฉืจืช ื”ืขืœืื” ืžื—ื“ืฉ ืฉืœ ื”ืชื—ื™ื™ื‘ื•ื™ื•ืช ืžืขื ืฃ ื ืคืจื“ ืœืขื ืฃ ืžืืกื˜ืจ ื—ื“ืฉ ื™ื•ืชืจ, ืชื•ืš ืฉืžื™ืจื” ืขืœ ืžื‘ื ื” ื”ืกื ื™ืฃ ื‘ืกื ื™ืฃ ื”ืžื•ืขื‘ืจ, ื•ืขืจื•ืš ื›ืžื” ืฉื™ื ื•ื™ื™ื ื‘ื”ืขืจื•ืช ื”ื”ืชื—ื™ื™ื‘ื•ืช ืชื•ืš ื›ื“ื™ ืชื ื•ืขื”.

  • ื ื•ืกืคื” ืชืžื™ื›ื” ืœื™ืฆื™ืจืช ืขื ืฃ ื—ื“ืฉ ื”ืžื‘ื•ืกืก ืขืœ ืชื•ืฆืื” ืฉืœ ืงื‘ื™ืขืช ื‘ืกื™ืก ื”ืžื™ื–ื•ื’ ืฉืœ ืฉื ื™ ืขื ืคื™ื ืื—ืจื™ื (ื‘ืกื™ืก ืžื™ื–ื•ื’, ื”ืชืงืฉืจื•ืช ืœืื‘ ืงื“ืžื•ืŸ ืžืฉื•ืชืฃ) ื‘ืืžืฆืขื•ืช ื”ืงื•ื ืกื˜ืจื•ืงืฆื™ื•ืช "git branch new A...B" ื•-"git checkout -b new A...B", ืฉื‘ื• "A ...B" ื›ืจื•ืš ื‘ื”ื’ื“ืจืช ื‘ืกื™ืก ืžื™ื–ื•ื’ ื‘ื™ืŸ ืฉื ื™ commits ืฉืฆื•ื™ื ื•, ื‘ื“ื•ืžื” ืœืื•ืคืŸ ืฉื‘ื• "git checkout A...B" ืžืขื‘ื™ืจ ืืช ื”-HEAD ืœ-base commit ื•-"diff A. ..B" ืžืฆื™ื’ ืืช ื”ืฉื™ื ื•ื™ื™ื ื‘ื™ืŸ commit "B" ืœื–ื”ื•ืช commit "A" "Ancestor".

    ืœื“ื•ื’ืžื”, ื›ืืฉืจ ืขื•ื‘ื“ื™ื ืขืœ ืขื ืฃ my-feature ื ืคืจื“, ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืชื›ื•ื ื” ื–ื• ื›ืืฉืจ ืจื•ืฆื™ื ืœื”ืชื—ื™ืœ ืžืขื ืฃ ืื—ืจ, ืœืžืฉืœ, ืžืื•ืชื• ืžืงื•ื ื‘ืขื ืฃ ื”ืžืืกื˜ืจ ืžืžื ื• ื”ื•ืฆื ื”ืขื ืฃ my-feature. ื‘ืขื‘ืจ, ื–ื” ื”ืฆืจื™ืš ื‘ื“ื™ืงื” ื™ื“ื ื™ืช ืฉืœ ื™ื•ืžืŸ ื”ืฉื™ื ื•ื™ื™ื, ืžื” ืฉื”ื™ื” ืœื ื ื•ื— ืื ื”ื™ื™ืชื” ืœืš ื”ื™ืกื˜ื•ืจื™ื” ื’ื“ื•ืœื” ืฉืœ ืฉื™ื ื•ื™ื™ื, ื•ืœืื—ืจ ืžื›ืŸ ื”ืคืขืœืช "git merge-base master my-feature" ื›ื“ื™ ืœื—ืฉื‘ ืืช ื”-hash ืฉืœ ื‘ืกื™ืก ื”ืžื™ื–ื•ื’ ื‘ื™ืŸ ื”-master ื•-my-feature. ื•ื™ืฆื™ืจืช ืขื ืฃ ื—ื“ืฉ ื™ื—ืกื™ืช ืœืื‘ ื”ืงื“ืžื•ืŸ ื”ืžืฉื•ืชืฃ "git branch my-other-feature hash." ื‘-Git 2.22, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืชื—ื‘ื™ืจ "git branch my-other-feature A...B" ื›ื“ื™ ืœื™ืฆื•ืจ ืขื ืฃ ื‘ื™ื—ืก ืœื‘ืกื™ืก ื”ืžื™ื–ื•ื’ ืฉืœ ืฉื ื™ ืขื ืคื™ื ืื—ืจื™ื;

  • ื ื•ืกืคื” ืืคืฉืจื•ืช "git branch --show-current" ืœื”ืฆื’ืช ืฉื ื”ืกื ื™ืฃ ืฉื”ื•ืฉื’ ื‘ืžื”ืœืš ืคืขื•ืœืช ื”ืชืฉืœื•ื;
  • ื ื•ืกืคื” ื”ืืคืฉืจื•ืช "git checkout โ€”no-overlay โ€” dir", ื”ืžืืคืฉืจืช, ื‘ืขืช ื‘ื™ืฆื•ืข ืคืขื•ืœืช ืงื•ืคื”, ืœื”ื‘ื™ื ืืช ืชื•ื›ืŸ ืกืคืจื™ื™ืช ื”-dir ืœื˜ื•ืคืก ื”ืžืชืื™ื ื‘ืžืœื•ืื• ืœืžืฆื‘ ื”ืกื ื™ืฃ ื”ืจืืฉื™. ืœื“ื•ื’ืžื”, ืื ื™ืฉ ืงื•ื‘ืฅ ื‘ืขื•ืชืง ื”ืžืงื•ืžื™ ืฉืœ ืกืคืจื™ื™ืช dir ืฉืื™ื ื• ื‘ืกื ื™ืฃ ื”ืžืืกื˜ืจ, ืื– ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ื‘ืขืช ื‘ื™ืฆื•ืข "git checkout master - dir" ื”ื•ื ื™ื™ืฉืืจ, ื•ืื ื”-"--no-overlay โ€ ืืคืฉืจื•ืช ืžืฆื•ื™ื ืช, ื”ื™ื ืชื™ืžื—ืง;
  • ื”ืคืงื•ื“ื” "git diff" ืžืฉืชืžืฉืช ื‘-API ืื•ื ื™ื‘ืจืกืœื™ ืœื ื™ืชื•ื— ืืคืฉืจื•ื™ื•ืช, ืžื” ืฉืžืืคืฉืจ ืœืื—ื“ ืืช ื”ื˜ื™ืคื•ืœ ื‘ืื•ืคืฆื™ื•ืช ืขื ื›ืœื™ ืขื–ืจ ืื—ืจื™ื ืฉืœ git. ืœื“ื•ื’ืžื”, ื‘-"git diff", ืœื›ืœ ื”ืืคืฉืจื•ื™ื•ืช ื™ืฉ ื›ืขืช ืืช ื”ืื ื˜ื’ื•ื ื™ืกื˜ื™ื ืฉืœื”ืŸ ("--function-context" ื•-"--no-function-context");
  • ื ื•ืกืคื” ื”ื™ื›ื•ืœืช ืœืกื ืŸ ืชื’ื™ื ืžื•ืจื—ื‘ื™ื ื”ืžืฆื•ืจืคื™ื ืœ-commits ื‘ืคืœื˜ "git log" ("ื˜ืจื™ื™ืœืจ" - ื“ื’ืœื™ ืžื™ื“ืข ื ื•ืกืคื™ื, ื›ื’ื•ืŸ Signed-off-by ื•-Co-authored-by). ืืคืฉืจ ืœืกื ืŸ ืชื•ื•ื™ื•ืช ื’ื ืœืคื™ ืžืคืชื— ื•ื’ื ืœืคื™ ืขืจืš, ืœื“ื•ื’ืžื”:
    "git log --pretty="%(trailers:key=ื ื‘ื“ืง ืขืœ ื™ื“ื™,valueonly)";

  • ืžื ื•ืข ืžืขืงื‘ ื—ื“ืฉ, Trace2, ื ื•ืกืฃ, ื”ืžืฆื™ืข ืคื•ืจืžื˜ ืคืœื˜ ื’ืžื™ืฉ ื•ืžื•ื‘ื ื” ื™ื•ืชืจ. Trace2 ืžืืคืฉืจ ืœืš ืœืืกื•ืฃ ื˜ืœืžื˜ืจื™ื” ืขืœ ืคืขื•ืœื•ืช ืฉื‘ื•ืฆืขื• ื•ื ืชื•ื ื™ ื‘ื™ืฆื•ืขื™ื ืœื ื™ืชื•ื— ื•ื ื™ืคื•ื™ ื‘ืื’ื™ื ืžืคื•ืจื˜ื™ื ื™ื•ืชืจ (ื”ืžื˜ืคืœ ืžื•ืงืฆื” ืขืœ ื™ื“ื™ ื”ืžืฉืชืžืฉ, ืฉื•ื ื ืชื•ื ื™ื ืœื ื ืฉืœื—ื™ื ื—ื™ืฆื•ื ื™ืช);
  • ื“ื•"ื— "git bisect" ื ืขืฉื” ืงืจื™ื ื™ื•ืชืจ, ืฉื‘ื• commits ื‘ืขื™ื™ืชื™ื™ื ืžื•ื“ื’ืฉื™ื ื›ืขืช ื‘ืฆื•ืจื” ื‘ืจื•ืจื” ื™ื•ืชืจ ื•ืžื•ืฆื’ื•ืช ืกื˜ื˜ื™ืกื˜ื™ืงื•ืช ืกื™ื›ื•ื ืขืœ ืฉื™ื ื•ื™ื™ื ืขื‘ื•ืจ ื›ืœ ืงื•ื‘ืฅ (ื‘ืจืžืช ืžืกืคืจ ื”ืฉื•ืจื•ืช ืฉื”ืฉืชื ื•);
  • ื”ื”ื™ื•ืจื™ืกื˜ื™ืงื” ืœืงื‘ื™ืขืช ืฉื™ื ื•ื™ ื”ืฉืžื•ืช ืฉืœ ืกืคืจื™ื•ืช ืขื•ื‘ื“ื• ืžื—ื“ืฉ ื›ื“ื™ ืœืžื ื•ืข ื”ืชืงื ื” ื›ื•ื–ื‘ืช ืฉืœ ืชื•ื•ื™ื•ืช ืฉื™ื ื•ื™ ืฉืžื•ืช. ื›ืืฉืจ ื™ืฉ ืกืคืง, ืกืคืจื™ื•ืช ื›ืืœื” ืžืกื•ืžื ื•ืช ื›ืขืช ื›ืžื ื•ื’ื“ื•ืช;
  • ืื–ื”ืจื” ืžื•ืฆื’ืช ื›ืืฉืจ ืืชื” ืžื ืกื” ืœื”ืชืงื™ืŸ ืชื’ ืขืœ ืชื’ ืื—ืจ, ืžื” ืฉื ืขืฉื” ื‘ื“ืจืš ื›ืœืœ ื‘ื˜ืขื•ืช ื•ื™ื›ื•ืœ ืœื”ื•ื‘ื™ืœ ืœื”ื’ื“ืจืช ื”ืชื’ ื‘-commit ืฉื’ื•ื™ (ืœื“ื•ื’ืžื”, ื‘ื ื™ื™ื” ื›ืžื• "git tag -f -m "ืขื“ื›ื•ืŸ ืžืขื•ื“ื›ืŸ" my-tag1 my-tag2โ€ณ ื™ื’ืจื•ื ืœื™ืฆื™ืจืช ืชื’ ื‘ืชื’ ื”ื™ืฉืŸ, ื‘ืขื•ื“ ืฉื”ืžืคืชื— ืฆื™ืคื” ืฉื”ืชื’ ื”ื—ื“ืฉ ื™ื•ืชืงืŸ ื‘-commit ืฉืขืœื™ื• ืžืฆื‘ื™ืข ื”ืชื’ ื”ื™ืฉืŸ);
  • ื”ื™ืฆื™ืจื” ืžื•ืคืขืœืช ืขื‘ื•ืจ ืžืื’ืจื™ ืžืคื•ืช ืกื™ื‘ื™ื•ืช (ืžื‘ื ื” "ืžืคื•ืช ืกื™ื‘ื™ื•ืช ืฉืœ ื ื’ื™ืฉื•ืช" ื”ืžื‘ื•ืกืก ืขืœ ื“ื™ืกืง), ื”ืžืื—ืกื ื™ื ื ืชื•ื ื™ื ืขืœ ืงื‘ื•ืฆื•ืช ืฉืœ ืื•ื‘ื™ื™ืงื˜ื™ื ื”ื–ืžื™ื ื™ื ืขื‘ื•ืจ ื›ืœ commit ื•ืžืืคืฉืจื™ื ืœืงื‘ื•ืข ื‘ืžื”ื™ืจื•ืช ืืช ื ื•ื›ื—ื•ืชื• ืฉืœ ืื•ื‘ื™ื™ืงื˜ ื‘ืกื™ืก. ืžื‘ื ื” ื–ื” ืžืงื˜ื™ืŸ ืžืฉืžืขื•ืชื™ืช ืืช ื–ืžืŸ ื”ื‘ื™ืฆื•ืข ืฉืœ ืคืขื•ืœื•ืช ืื—ื–ื•ืจ ื ืชื•ื ื™ื (git fetch).

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”