List some useful git commands.
-
-
Save Hansimov/23bb639911d474c7ab5b93d32bcbd99d to your computer and use it in GitHub Desktop.
Git delete multiple branches with one line command:
git branch -D `git branch | grep -E 'main_10029.*'`
or (recommend)
git branch | grep 'main_10029.*' | xargs git branch -D
(Do not miss the .
before *
in the grep regex)
Deleted branch main_1002909 (was 94****7e).
Deleted branch main_1002920 (was a0****9b).
Deleted branch main_1002925 (was d3****38).
...
Deleted branch main_1002985 (was d6****17).
- Can you delete multiple branches in one command with Git? - Stack Overflow
Error: Entry '...' not uptodate. Cannot merge.
Solution:
git rm --cached <filename>
- Git pull: error: Entry foo not uptodate. Cannot merge - Stack Overflow
Git log to console (no pager),
git --no-pager log --pretty='format:%Cgreen[%h] %Cblue[%ai] %Creset[%an]%C(Red)%d %n %Creset%s %n' -n3
[xxxxxxxx] [2022-02-23 13:00:13 -0800] [author1] (HEAD -> main_12346, tag: 12346, origin/main, origin/HEAD, main)
[Fix] Fix a bug (#678)
[yyyyyyyy] [2022-02-23 12:22:22 -0800] [author2] (tag: 12345)
[Enhance] Enhance a feature (#677)
[zzzzzzzz] [2022-02-23 09:09:09 +0100] [author3] (tag: 12344)
[Add] Add a component (#676)
- Git - pretty-formats Documentation
Revert specific files to an old commit
git restore --source=c5f567 file1_to_restore file2_to_restore
Revert to 1 commit before c5f567:
git restore --source=c5f567~1 file1_to_restore file2_to_restore
Use git status
to check whether the files are reverted
Reset/Drop previous commit(s):
--soft
will leave all changed files as "changes to be committed":
git reset --soft HEAD~1
--hard
will discard all changes in the working tree and delete all untracked files:
git reset --hard HEAD~1
- git - How can I reset or revert a file to a specific revision? - Stack Overflow
- Git - git-reset Documentation
Git sync forked repo with original repo
(1) Fork original repo to user repo in the web page
(2) Git clone user repo to local
git clone https://github.com/<user_name>/<repo_name>.git <local_repo_name>
(3) Add original repo to upstream
git remote remove upstream
git remote add upstream https://github.com/<original_owner_name>/<repo_name>.git
(4) Use following command to see info of origin and upstream:
git remote -v
(5) Create local branches from origin
git checkout -f -b main origin/main
git checkout -f -b dev origin/dev
(6) Sync origin (local and remote) with upstream
git fetch upstream
git checkout <branch_name>
git merge upstream/<branch_name>
git push origin <branch_name>
- Git Forks and Upstreams: How-to and a cool tip | Atlassian Git Tutorial
- Syncing a fork - GitHub Docs:
Git rebase to target branch, and use target's changes if conflicts (i.e., files both modified in two branches).
git rebase <target-branch> -X theirs
Else use ours:
git rebase <target-branch> -X ours
-
Resolve Git merge conflicts in favor of their changes during a pull - Stack Overflow
-
Git - git-rebase Documentation
Git drop some commits in the branch:
git rebase -i HEAD~N
The ~N
means rebase the last N
commits (N
must be a number, for example HEAD~10
).
Then, you can edit the file that Git presents to you to delete the offending commit.
On saving that file, Git will then rewrite all the following commits as if the one you deleted didn't exist.
Use push -f
to force the push and replace the remote branch with your local one.
- git - How do I delete a commit from a branch? - Stack Overflow
Git pull force overwrite local changes:
git fetch --all
# git branch backup-changes
git reset --hard origin/main
- version control - How do I force "git pull" to overwrite local files? - Stack Overflow
Auto complete git branch names in (t)csh
Download git-completion.bash
and git-completion.tcsh
:
curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash
curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.tcsh -o ~/.git-completion.tcsh
Add following lines to ~/.cshrc
:
set autolist=ambiguous
source ~/.git-completion.tcsh
- terminal - git auto-complete for branches at the command line? - Ask Different
- git/git-completion.tcsh at master · git/git
- git/git-completion.bash at master · git/git
Gist remove/squash some revisions:
References:
- git - How to delete a specific revision of a github gist? - Stack Overflow
NOTE: Do not forget to remove the #
after rebase in order to add a valid commit message after squashing
Git change author of previous commit:
git commit --amend --author="Author Name <[email protected]>" --no-edit
References:
- git - How to change the commit author for a single commit? - Stack Overflow
Git update submodules to latest commit:
git submodule foreach git pull
or submodule is in detached state:
git submodule foreach git pull origin main # (master)
References:
- Update Git submodule to latest commit on origin - Stack Overflow
Git pull submodule:
git submodule update --init --recursive # (First time)
git submodule update --recursive --remote
References:
- Pull latest changes for all git submodules - Stack Overflow
Remove contributor from GitHub repo page:
- On GitHub web page, change a branch name (e.g.,
main
-->main1
).- It updates the contributor list on the GitHub repo dashboard.
- Then change it back (
main1
-->main
).
References:
- git - Removing contributor from github.com? - Stack Overflow
Git get latest tags name in current branch:
git --no-pager log --simplify-by-decoration --decorate --pretty=oneline -10 | grep -F -m1 '(tag: '
(Not recommended) Another solution:
git describe --tags