Git installs as a normal package on Ubuntu:
sudo apt-get install git |
Configuring Git user is an optional step:
git config --global user.email "you@example.com" git config --global user.name "Your Name" |
Type the following command to create an empty repository wherever your code is:
cd ~ git init |
Now all the initialization is done. Add something to the repository:
git add www commit -m "first commit" |
The basic Git commands are:
List files in the repository | git ls-files |
Undo local changes | git checkout <filename> |
List changed files those you need to commit | git status <directory> |
Commit changes | git commit –m “message” <directory> |
Show commit history for a branch | git log -3 master.. |
Show files in a commit | git diff-tree –no-commit-id –name-only -r <commit> |
Disabling SSL cert check. | git config —global http.sslVerify «false» |
Delete the most recent commit, keeping the work you’ve done | git reset –soft HEAD~1 |
Delete the most recent commit, destroying the work you’ve done | git reset –hard HEAD~1 |
View the change history of a file | gitk [filename] gitk –follow [filename] |
Viewing Unpushed Git Commits | git log origin/master..HEAD |
List of files to be pushed | git diff –stat –cached [remote/branch] |
Show both local and remote branches | git branch -a |
Show remote branches | git branch -r |
Publish a local branch | git push -u origin <branch-name> |
Show the remote address of a repo | git remote -v |
Apply a patch | git apply –ignore-space-change –ignore-whitespace patch.diff |
Probably one of the most interesting git commands is cherry-pick:
Git visual tools:
sudo apt-get install qgit
sudo apt-get install melt
Adding a submodule:
git submodule add https://github.com/dmitriano/Awl.git lib/Awl
#Then after cloning:
git submodule init
git submodule update
Renaming the local and remote branch dev-data-race with android-1.0.15:
git branch -m dev-data-race android-1.0.15
git push origin :dev-data-race
git push --set-upstream origin android-1.0.15
Deleting remote branch dev-sanitizer:
git branch -d dev-sanitizer
git push origin --delete dev-sanitizer
Tagging:
git tag -a v2.2.13 -m "Version 2.2.13 in Google Play."
git describe --tags
git tag
git show --summary v2.2.13
git push origin v2.2.13
git push origin --tags
git checkout v2.2.13
git checkout -b version2.2.13 v2.2.13
git log --pretty=oneline
git tag -a v2.2.13 9fceb02
git show refs/tags/v2.5.31#162:src/file.cpp
git tag -a v2.6.0 -m "Version 2.6.0 in Google Play, APK 181-184."
git push --delete origin v2.6.0
git tag --delete v2.6.0
git tag -l "v2.7*"
git push -d origin $(git tag -l "v2.7*")
git tag -d $(git tag -l "v2.7*")
Creating a repository on the server.
git init --bare tradebot.git
Pushing a newly created repository on the client.
git remote add origin https://git.developernote.com/tradebot.git
git push origin master
Checkout file from a different branch:
git ls-tree master src/LinesGame/LinesGameQt
git checkout master -- src/LinesGame/LinesGameQt/icons.qrc
Find and restore a deleted file or folder:
git rev-list -n 1 HEAD -- src/LinesGame/LinesGameQt/platform
git checkout 41264a71364dc8dbab96eec67e2b9d25332b2ca4^ -- src/LinesGame/LinesGameQt/platform
Save credentials:
git config --global credential.helper store
Looks like when I do
git config --global credential.useHttpPath true
in GitBash, Windows credential manager saves full repository URL, see Git credential helper – update password.
Fix your project to use a remote with credentials built in:
git remote set-url origin https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git
Update remote branches:
git fetch --prune --all
Delete a tag:
git tag --delete 3.0.17
git push --delete origin 3.0.17
Truncating git history (https://passingcuriosity.com/2017/truncating-git-history/):
git checkout –orphan temp e41d7f633c45c46bd42e97cecf93204191d9e4c9
git commit -m “Truncate history”
git rebase –onto temp e41d7f633c45c46bd42e97cecf93204191d9e4c9 master
Git does use deltas for storage (https://stackoverflow.com/questions/8198105/how-does-git-store-files)
clean all the modules recursively:
git submodule foreach –recursive “git clean -dfx”
How do I configure git to ignore some files locally?
https://stackoverflow.com/questions/1753070/how-do-i-configure-git-to-ignore-some-files-locally
The .git/info/exclude file has the same format as any .gitignore file
https://stackoverflow.com/questions/53066369/fast-forward-merge-is-not-possible-to-merge-this-request-first-rebase-locally
Starting on your newBranch:
git checkout master to get back on the master branch
git pull origin master to get the most up-to-date version of the master branch
git checkout newBranch to get back on your newBranch
git rebase origin/master -i to perform an interactive rebase.
https://stackoverflow.com/questions/7203515/how-to-find-a-deleted-file-in-the-project-commit-history
Find a file in the commit history:
git log –all –full-history somefolder/somefile.cpp
https://stackoverflow.com/questions/424071/how-do-i-list-all-the-files-in-a-commit
How do I list all the files in a commit?
git diff-tree –no-commit-id –name-only bd61ad98 -r
https://stackoverflow.com/a/75450029/9261322
Completely remove the changes of a specific file from the history
Say we have history like this:
$ git log
commit c4e983a7f506f71e01d2e1e4cddf2f768e2c2548 (HEAD -> main)
Author: REDACTED
Date: REDACTED
3
commit 3e616c11fa1ce71157e4b654e4e3742f97c6e0e6
Author: REDACTED
Date: REDACTED
2
commit 7655a6d373c26db5d30086a6e7e23e755c960924
Author: REDACTED
Date: REDACTED
1
https://stackoverflow.com/questions/34332687/how-can-i-know-in-git-if-a-branch-has-been-already-rebased-onto-master
How can I know in git if a branch has been already rebased onto master?
git log –oneline –cherry master…some-branch
git log –oneline –cherry development…GPR-123
Undo a Git merge that hasn’t been pushed yet
https://stackoverflow.com/a/2389423
With git reflog check which commit is one prior the merge (git reflog will be a better option than git log). Then you can reset it using:
git reset –hard commit_sha
There’s also another way:
git reset –hard HEAD~1
How I removed some changes that I committed by mistake:
git checkout -b GPR-123a
git reset origin/development
git commit -a -m “GPR-123: Zakolhozil chto-to”
git push -u origin GPR-123a
https://stackoverflow.com/questions/25356810/git-how-to-squash-all-commits-on-branch
Another way to squash all your commits is to reset the index to master:
git checkout yourBranch
git reset $(git merge-base master $(git branch –show-current))
git add -A
git commit -m “one commit on yourBranch”
git push -d origin bug-588
error: unable to delete 'bug-588': remote ref does not exist
error: failed to push some refs to 'ssh://git@gitlab-my-company.com:2222/my-team/my-project.git'
The branch is deleted already on the remote and the local is not aware of it. Run
git fetch --prune --all
and verify is the remote branch still there.
How to see which commit a git submodule points at
https://stackoverflow.com/questions/20655073/how-to-see-which-commit-a-git-submodule-points-at
git ls-tree HEAD
in the submodule directory.