How to lose code and infuriate people
You've already set everything up, e.g.
$ git config --global user.name "Block Norris"
$ git config --global user.email conga@example.org
$ _
It's commits all the way down...
And branches...
And a HEAD...
(Which can become detached!)
You can also tag things...
Simple!
Those bugs aren't going to write themselves...
$ git checkout -b pineapple
Switched to a new branch 'pineapple'
$ _
console.log("Unexpected pineapple");
$ git add -A
$ git commit -s -m "Add pineapple"
[pineapple 231525e] Add pineapple
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 pineapple.js
$ _
$ git checkout main
Switched to branch 'main'
$ _
⏲
Time passes...
$ git merge pineapple
Merge made by the 'recursive' strategy.
pineapple.js | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 pineapple.js
$ _
Simple...
...except when there are other people!
🐧 🐧 🐧
Flexible, but this is pretty common...
🚀
Which you fork...
🛰
Which you clone...
💻
Which you swear at!
$ git remote -v
origin git@github.com:jthub/hyperledger-composer.git (fetch)
origin git@github.com:jthub/hyperledger-composer.git (push)
sstone1 git@github.com:sstone1/composer.git (fetch)
sstone1 git@github.com:sstone1/composer.git (push)
upstream git@github.com:hyperledger/composer.git (fetch)
upstream git@github.com:hyperledger/composer.git (push)
$ _
Share all the bugs...
$ git rebase main
First, rewinding head to replay your work on top of it...
Applying: Add pineapple
$ _
No conflicts!
🎉
Except...
It's not the same commit!
🔥
$ git push --force-with-lease origin pineapple
Counting objects: 24, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (24/24), 1.91 KiB | 0 bytes/s, done.
Total 24 (delta 2), reused 0 (delta 0)
To https://github.com/jthub/hyperledger-composer
* [new branch] pineapple -> pineapple
$ _
⚠️
Don't force push to main!
Get Tower...
Always start in a new branch...
and make sure it's based on the latest upstream main!
$ git status
On branch main
Your branch is up-to-date with 'origin/main'.
nothing to commit, working tree clean
$ git pull upstream main
remote: Enumerating objects: 56, done.
...
32 files changed, 123 insertions(+), 123 deletions(-)
$ git checkout -b pineapple
Switched to a new branch 'pineapple'
$ _
git status is your friend
$ git status
On branch main
Your branch is ahead of 'origin/main' by 2 commits.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
$ _
git log is the enemy of your enemy
$ git log -n 5 --oneline
2f07943c0 (HEAD -> main, upstream/main, add-migration) bump to version 0.20.3 (#4459)
3b9de768d (tag: v0.20.2) Add cloud wallet implementations to docker images (#4456)
860536f52 (origin/main, origin/HEAD) [Main] Add caveats/advisory for scope of generators (Angular/CLI) plus Multi-Org Fabric v1.2.1 update (#4451)
5e2abe271 [Main] Upgrade Shim (#4453)
f635247c3 [main] remove info about community calls (#4450)
$ _
One commit is usually plenty...
and much easier to rebase!
$ git commit --amend
[pineapple 0acce17] Add pineapple
Date: Wed Oct 17 13:52:04 2018 +0100
3 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 ham.js
create mode 100644 pineapple.js
create mode 100644 pizza.js
$ _
Oh, you already have more than one commit...
$ git log --oneline -n 4
c7005cd (HEAD -> pineapple) Code code code
475b463 Hacking is fun
f97caf5 Hack stuff
e62064c Initial commit
$ git rebase -i HEAD~3
...pick, squash, squash...
Successfully rebased and updated refs/heads/pineapple.
$ git log --oneline -n 2
64cbfb5 (HEAD -> pineapple) Add pineapple
e62064c Initial commit
$ _
That's not my commit...
its changes do not need amending!
$ git commit --amend
Aborting commit due to empty commit message.
$ _
Prefer commits to stashing...
unless it's something quick
$ git stash
Saved working directory and index state WIP on pineapple: f96a461 Fix stuff
$ _
...
$ git stash apply
On branch pineapple
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: upside-down-cake.js
$ _
If you're worried, create another branch!
$ git checkout -b pineapple-backup
Switched to a new branch 'pineapple-backup'
$ _
Don't panic...
your changes are probably somewhere!
$ git reflog show -n 2
073d926 HEAD@{0}: commit (amend): Add pineapple
733da01 HEAD@{1}: commit: Add pineapple
$ git reset --soft HEAD@{1}
$ _
HEAD~1
HEAD@{1}
64cbfb5
Cherry pick for victory!
$ git cherry-pick 073d926
[pineapple f96a461] Fix stuff
Date: Wed Oct 17 11:47:37 2018 +0100
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 fix.txt
$ _
Did I mention Tower?
Try here...