# Git

* `git branch -vv` check for remote repo connection
* `git branch -r/-a` list remote/all branches
* `git branch -u origin/<branch>` set the upstream branch for current branch
* `git blame <file-name>` check for contributors
* `git cherry-pick <commit1> <commit2> ...` pick commits and append to current HEAD
* `git config --global user.email "email@example.com"`
* `git config --global user.name "Your Name"`
* `git config --global alias.s status` use `git s` in short for `git status`
* `git config --global push.default simple`
* `git config --global pull.ff only`
* `git config --global core.autocrlf true/false/input`
* `git config --global --unset <entry-name>` unset global configuration
* `git clone -b <branch-name> --single-branch <url>`
* `git commit --amend` re-commit the last commit
* `git checkout -` go to previous branch
* `git checkout <branch>/<commit-id>/<tag>`
* `git checkout -b <branch>` create a new branch and checkout to it
* `git checkout -b <branch> origin/<branch>` also specify the upstream branch&#x20;
* `git checkout <file-name>` undo a file to the last commit (valid before `git add` this file)
* `git clean <file-name> -f` remove untracked file
* `git clean <directory-name> -df` remove untracked directory
* `git clean -X -f` remove files ignored by `.gitignore`
* `git diff --staged/cached` diff between last commit and staged files
* `git diff <id1> <id2>`
* `git diff <branch1> <branch2>`
* `git describe --tags --abbrev=0` most recent tag in current branch
* `git log --graph --pretty=oneline --decorate --all`
* `git push --force` force update remote repo (overwrite commits in remote repo)
* `git push origin master` will push local *master* to remote *master*, regardless of current branch
* `git push origin <source>:<destination>` push local *source* branch to remote *destination* branch where `source` could also be a location represented by `HEAD~1` or `master^` &#x20;
* `git push origin :foo` push nothing to a remote branch foo will delete this branch
* `git fetch origin :foo` fetch nothing to a local branch foo will create this new branch&#x20;
* `git pull` = git fetch + git merge; two branches in history
* `git pull --rebase` = git fetch + git rebase; a single line in history (recommended)
* `git rm <file-name> -f` remove a staged file and delete it from file system
* `git rm <file-name> --cached` remove a staged file but still keep it in working directory
* `git reset <file-name>` move a file from staging to working directory
* `git reset --hard/--soft/--mixed <commit-id>`
* `git remote -v` to see the current remote URL
* `git remote set-url origin <newurl>` reset URL for origin
* `git revert <commit-id>` go back to this commit by adding a new commit
* `git reflog` see all history operations
* `git rebase <branch>`  merge into a single line by making copies of new commits
* `git rebase -i`  interaction mode (can pick commits)
* `git stash`
* `git stash list/pop/apply/drop/clear`
* `git show <branch-name>:<file-name>`
* `git status --ignored` show files ignored by `.gitignore`
* `git tag <name>`
* `git tag -ln` check for detailed info
* `git update-index --assume-unchanged <path/to/file>` untrack/hide a file
* `git update-index --no-assume-unchanged <path/to/file>` track/unhide a file

references: [Version Control with Git](http://swcarpentry.github.io/git-novice/); [Learn Git Branching](https://learngitbranching.js.org/); [How to undo almost anything with git](https://github.blog/2015-06-08-how-to-undo-almost-anything-with-git/)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.hanzheteng.com/development/linux/git.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
