Git mini workshop

Distribution Model

John Doe's laptop

secret-project

github.com/john.doe/secret-project

Jane Doe's laptop

secret-project

github.com/jane.doe/secret-project

github.com

origin

jane

john

origin

$ git remote
origin

$ git remote get-url origin
ssh://git@github.com/kocsismate/php-src.git

$ git remote add upstream ssh://git@git.php.net/php-src.git

$ git remote set-url upstream ssh://git@github.com/kocsismate/php-src.git

Distribution Model

$ git push --atomic upstream master PHP-8.0
remote: Resolving deltas: 100% (529/529), completed with 303 local objects.
To ssh://github.com/kocsismate/php-src.git
   ab4c5976d7..6ec25f386f  PHP-8.0 -> PHP-8.0
   8c14675217..803779e84b  master -> master

Distribution Model

Distribution Model

author vs. co-author vs. committer

commit 1954e5975846b3952ce1d2d6506e6d7134c89684
Author: Máté Kocsis <kocsismate@woohoolabs.com>
Date:   Tue Jan 26 11:50:36 2021 +0100

    Add support for generating class entries from stubs
    
    Closes GH-6289
    
    Co-authored-by: Nikita Popov <nikita.ppv@gmail.com>

Distribution Model

Sharing Changes

$ git format-patch <branch>
$ git am <patch_file>

Integration strategies

Integration strategies

Integration strategies

When, why and how to rebase?

  • when integrating to a private branch
  • when commit order doesn't matter
  • for "clean" commit history
  • for easy rewrites
  • you have to force push the changes!

Integration strategies

When, why and how to merge?

  • when integrating to a shared branch
  • when commit order matters
  • when the integration time matters
  • you can squash your commits: --squash

Integration strategies

Cherry-pick

$ git checkout master
$ git cherry-pick 1734e58e7
$ git show 9cec093b7
commit 9cec093b7fb75fd881d58d0529cc99c3ff256a44
Author: Máté Kocsis <kocsismate@woohoolabs.com>
Date:   Thu Oct 22 10:39:18 2020 +0200
$ git show 9cec093b7f~1
commit 420184ad529443182c9a348a55b1c9216005c613
Author: Christoph M. Becker <cmbecker69@gmx.de>
Date:   Wed Dec 16 00:02:39 2020 +0100

Integration strategies

  • git pull:
    • git fetch + git merge
  • git pull --rebase
    • git fetch + git rebase

Rewriting

Rewriting History

git commit --amend

Rewriting History

git reset HEAD^1

Rewriting History

git commit --fixup

Rewriting History

git rebase --interactive

Debugging

git bisect

$ git bisect start
$ git bisect bad
$ git bisect good 98fb565c74
Bisecting: 8 revisions left to test after this (roughly 3 steps)

✋ Q&A

Git mini workshop

By Máté Kocsis

Git mini workshop

  • 454