repo$ git init Initialised empty Git repository in repo/.git/ repo (master #%)$ git add a.txt repo (master +)$ git status ... new file: a.txt ... repo (master +)$ git diff --staged ... repo (master +)$ git commit -m 'Initial' [master (root-commit) 902c9e2] Initial 1 file changed, 5 insertions(+) create mode 100644 a.txt repo (master)$
repo (some_branch)$ - branch name repo (some_branch %)$ - untracked files repo (some_branch *)$ - modified files repo (some_branch +)$ - uncommitted files repo (some_branch=)$ - local in same as remote repo (some_branch *=)$ - in sync with remote, but modified files repo (some_branch>)$ - ahead of remote repo (some_branch<)$ - behind remote
temp$ git clone repo.git Cloning into 'repo'... done. temp$ cd repo repo (master=)$ git pull Already up-to-date. ... repo (master *=)$ git commit -am 'Change 3' [master 2180e3e] Change 3 1 file changed, 1 insertion(+), 1 deletion(-) repo (master>)$ git log --oneline * 2180e3e (HEAD -> master) Change 3 * 6c3a5fd (origin/master, origin/HEAD) Change 2 * 34d83e5 Change 1 * 5cbc335 Initial repo (master>)$ git push ... 6c3a5fd..2180e3e master -> master repo (master=)$
repo (master=)$ git checkout -b some_branch ... repo (some_branch *)$ git commit -am 'Change 4' [some_branch c8bb82d] Change 4 1 file changed, 1 insertion(+), 1 deletion(-) repo (some_branch)$ git push fatal: The current branch some_branch has no upstream branch. ... git push --set-upstream origin some_branch repo (some_branch)$ git push --set-upstream origin some_branch ... repo (some_branch=)$ git checkout - repo (master=)$
repo (some_branch)$ git push fatal: The current branch some_branch has no upstream branch. ... git push --set-upstream origin some_branch repo (some_branch)$ git push --set-upstream origin some_branch repo (some_branch=)$
repo (some_branch)$ git config --global push.default current
repo (some_branch)$ git push -u repo (some_branch=)$
repo (some_branch=)$ git log --graph --oneline some_branch master * 49d5900 (origin/master, origin/HEAD, master) Other change | * c8bb82d (HEAD -> some_branch, origin/some_branch) Change 4 |/ * 2180e3e Change 3 * 6c3a5fd Change 2 * 34d83e5 Change 1 * 5cbc335 Initial repo (some_branch=)$
repo (develop=)$ git log --oneline develop a5d20f6 (HEAD -> develop, origin/develop) Merge branch 'release2' into develop 1f97e98 Merge branch 'feature6' into develop c185f20 Merge branch 'bugfix6' into release2 8602ef3 Merge branch 'feature3' into develop 1c42702 Change 18 4bf0480 Change 19 c911945 Merge branch 'release1' into develop 3a506a2 Change 17 c340264 Change 16 640661e Merge branch 'release1' into develop
repo (develop=)$ git log --graph --oneline develop * a5d20f6 (HEAD -> develop, origin/develop) Merge branch 'release2' into develop |\ | * c185f20 Merge branch 'bugfix6' into release2 |/| | * 4bf0480 Change 19 |/ * 1f97e98 Merge branch 'feature6' into develop |\ | * 1c42702 Change 18 | * c340264 Change 16 * | 8602ef3 Merge branch 'feature3' into develop |\ \ | * | 3a506a2 Change 17 | * | efa40dc Change 13 | * | c8d7baa Change 4 * | | c911945 Merge branch 'release1' into develop |\ \ \
repo (develop=)$ git show a5d20f6 commit a5d20f6726de26a42b58223f2feb45ec04c1afd8 (HEAD -> develop, origin/develop) Merge: 1f97e98 c185f20 Author: Alice <alice@example.com> Date: Tue Jun 28 21:16:53 2022 +0100 Merge branch 'release2' into develop repo (develop=)$
repo (develop=)$ git log --first-parent --graph --oneline develop * a5d20f6 (HEAD -> develop, origin/develop) Merge branch 'release2' into develop * 1f97e98 Merge branch 'feature6' into develop * 8602ef3 Merge branch 'feature3' into develop * c911945 Merge branch 'release1' into develop ... * d8784d8 (tag: 0.1) Change 1
repo (develop=)$ git log --oneline --graph --parents develop * a5d20f6 1f97e98 c185f20 (HEAD -> develop, origin/develop) Merge branch 'release2' into develop |\ | * c185f20 1f97e98 4bf0480 Merge branch 'bugfix6' into release2 |/| | * 4bf0480 1f97e98 Change 19 |/ * 1f97e98 8602ef3 1c42702 Merge branch 'feature6' into develop |\ ... repo (develop=)$ git log --oneline --graph --parents ^1f97e98 c185f20 * c185f20 1f97e98 4bf0480 Merge branch 'bugfix6' into release2 * 4bf0480 1f97e98 Change 19 repo (develop=)$
repo (develop=)$ git log --oneline --graph --parents develop * a5d20f6 1f97e98 c185f20 (HEAD -> develop, origin/develop) Merge branch 'release2' into develop |\ | * c185f20 1f97e98 4bf0480 Merge branch 'bugfix6' into release2 |/| | * 4bf0480 1f97e98 Change 19 |/ * 1f97e98 8602ef3 1c42702 Merge branch 'feature6' into develop |\ ...
a5d20f6^ is 1f97e98 a5d20f6~ is 1f97e98 a5d20f6^2 is c185f20 a5d20f6~2 is 1f97e98~ which is 8602ef3 a5d20f6^^ is 1f97e98^ which is 8602ef3 a5d20f6^2^ is c185f20^ which is 1f97e98
repo (develop)$ git log --oneline --graph develop feature * d682b2a (HEAD -> develop) Some other change | * d0c3ef9 (feature) Change 3 | * 68cdd49 Change 2 | * a6da8b9 Change 1 |/ * 34d4b9f Base repo (develop)$
repo (develop)$ git merge --no-ff feature
Merge branch 'feature' into develop # Please enter a commit message to explain why this merge is necessary, ... ~ :x
Merge made by the 'recursive' strategy. a.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) repo (develop)$
repo (develop)$ git log --oneline --graph develop feature * 3c37e6d (HEAD -> develop) Merge branch 'feature' into develop |\ | * d0c3ef9 (feature) Change 3 | * 68cdd49 Change 2 | * a6da8b9 Change 1 * | d682b2a Some other change |/ * 34d4b9f Base repo (develop)$ git show commit 3c37e6d716f76bb4f4ad2632feb0534be6102481 (HEAD -> develop) Merge: d682b2a d0c3ef9 Author: Alice <alice@example.com> Date: Mon Jun 20 21:03:32 2022 +0100 Merge branch 'feature' into develop repo (develop)$
repo (develop)$ git log --oneline --graph develop feature * d594416 (feature) Change 1 * 364ef22 (HEAD -> develop) Base repo (develop)$ git merge --ff-only feature Updating 364ef22..d594416 Fast-forward a.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) repo (develop)$ git log --oneline --graph develop feature * d594416 (HEAD -> develop, feature) Change 1 * 364ef22 Base repo (develop)$
repo (develop)$ git merge feature
repo (develop)$ git merge --squash feature Squash commit -- not updating HEAD Automatic merge went well; stopped before committing as requested repo (develop +)$ git commit -m 'Change 1 to 3' [develop 3c58559] Change 1 to 3 1 file changed, 1 insertion(+), 1 deletion(-) repo (develop)$ git log --oneline --graph develop feature * 3c58559 (HEAD -> develop) Change 1 to 3 * 1678d67 Some other change | * 4450028 (feature) Change 3 | * 2df5e28 Change 2 | * e27fb78 Change 1 |/ * 70045eb Base repo (develop)$
repo (feature)$ git rebase develop First, rewinding head to replay your work on top of it... Applying: Change 1 Applying: Change 2 Applying: Change 3 repo (feature)$ git log --oneline --graph develop feature * c659a53 (HEAD -> feature) Change 3 * 012859d Change 2 * 8dd3340 Change 1 * 4b96ca3 (develop) Some other change * ce88a4f Base repo (feature)$
repo (feature)$ git rebase -i HEAD~4
pick 18dedc5 Change 1 fixup f619bd2 Change 4 pick ec47071 Change 2 fixup 56ce00b Change 3 # Rebase 3d89342..f619bd2 onto f619bd2 (4 commands) # # Commands: # p, pick <commit> = use commit ... # f, fixup <commit> = like "squash", but discard this commit's log message ... jjjddkkP cwfixup ESC jj0. :x
repo (feature)$ git rebase -i HEAD~4 Successfully rebased and updated refs/heads/feature. repo (feature)$ git log --oneline --graph develop feature * 5ca72ab (HEAD -> feature) Change 2 * a9cecf4 Change 1 | * 85b3097 (develop) Some other change |/ * 3d89342 Base repo (feature)$
repo (release)$ git log --oneline --graph develop release * d641e3b (develop) Change 3 * a543eee Bugfix * af606c4 Change 1 | * 595643f (HEAD -> release) Release change |/ * ec4d982 Base repo (release)$ git cherry-pick a543eee [release 567fcc3] Bugfix ... repo (release)$ git log --oneline --graph develop release * 567fcc3 (HEAD -> release) Bugfix * 595643f Release change | * d641e3b (develop) Change 3 | * a543eee Bugfix | * af606c4 Change 1 |/ * ec4d982 Base repo (release)$
repo (feature *)$ git log --oneline feature 3c68932 (HEAD -> feature) Some change f887d61 Base repo (feature *)$ git add . repo (feature +)$ git commit --amend --no-edit [feature ad3d11e] Some change Date: Tue Jun 21 20:20:05 2022 +0100 1 file changed, 1 insertion(+), 1 deletion(-) repo (feature)$ git log --oneline feature ad3d11e (HEAD -> feature) Some change f887d61 Base repo (feature)$
repo (feature<>)$ git log --oneline --graph feature origin/feature * ba4d6e8 (HEAD -> feature) Better change | * 5b38ed3 (origin/feature) Some change |/ * b766375 Base repo (feature<>)$ git push ! [rejected] feature -> feature (non-fast-forward) ... repo (feature<>)$ git push --force ... + 5b38ed3...ba4d6e8 feature -> feature (forced update) repo (feature=)$ git log --oneline --graph feature origin/feature * ba4d6e8 (HEAD -> feature, origin/feature) Better change * b766375 Base repo (feature=)$
repo (feature *)$ git diff a.txt ... -qui -dolorem +lorem ipsum, ... numquam -[do] +do eius ...
repo (feature *)$ git add -p a.txt ... -qui -dolorem +lorem ipsum, ... (1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]? y ... numquam -[do] +do eius ... (2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,?]? n repo (feature *+)$
repo (feature *+)$ git commit -m 'Some commit' [feature 4660ca5] Some commit 1 file changed, 1 insertion(+), 2 deletions(-) repo (feature *)$ git diff a.txt ... numquam -[do] +do eius modi ... repo (feature *)$
repo (develop=)$ git branch * develop feature repo (develop=)$ git branch -d feature Deleted branch feature (was 4660ca5). repo (develop=)$ git push origin --delete feature - [deleted] feature repo (develop=)$ git pull --prune - [deleted] (none) -> origin/another_feature Already up-to-date. repo (develop=)$
repo (feature)$ git log --graph --oneline feature develop * 3438fc3 (HEAD -> feature) Some change * 23ee7fe (origin/develop, develop) Base repo (feature)$
repo (feature)$ git checkout develop Switched to branch 'develop' Your branch is up-to-date with 'origin/develop'. repo (develop=)$ git merge --ff-only feature Updating 23ee7fe..3438fc3 Fast-forward a.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) repo (develop>)$ git log --graph --oneline feature develop * 3438fc3 (HEAD -> develop, feature) Some change * 23ee7fe (origin/develop) Base repo (develop>)$ git push
repo (develop>)$ git push ! [rejected] develop -> develop (fetch first) error: failed to push some refs to '/home/mircea/Desktop/temp/repo.git' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. repo (develop>)$
repo (develop>)$ git pull ... 23ee7fe..615b3b4 develop -> origin/develop Merge made by the 'recursive' strategy. b.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 b.txt repo (develop>)$ git push ... 615b3b4..0e030a7 develop -> develop repo (develop=)$
repo (develop=)$ git log --graph --oneline feature develop * 0e030a7 (HEAD -> develop, origin/develop) Merge branch 'develop' |\ | * 615b3b4 Other change * | 3438fc3 (feature) Some change |/ * 23ee7fe Base repo (develop=)$
repo (develop>)$ git reset --hard origin/develop HEAD is now at 615b3b4 Other change repo (develop=)$