Git使用笔记

这篇文章只是个人笔记,如果没有实际使用过这些命令,请先自行阅读官方文档。

全局

配置个人信息

1
2
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com

初始化git repo
git init

注意在Git 2.0之后你可能会遇到以下提示

When push.default is set to ‘matching’, git will push local branches to the remote branches that already exist with the same name.

Since Git 2.0, Git defaults to the more conservative ‘simple’ behavior, which only pushes the current branch to the corresponding remote branch that ‘git pull’ uses to update the current branch.

See ‘git help config’ and search for ‘push.default’ for further information. (the ‘simple’ mode was introduced in Git 1.7.11. Use the similar mode ‘current’ instead of ‘simple’ if you sometimes use older versions of Git)

执行下列命令之一来设定push.default,避免每次都看到这个提醒

1
2
git config --global push.default matching
git config --global push.default simple

配置用于连接GitHub的SSH

配置好SSH连接后,记得修改原有git repo中的远程仓库的地址

1
2
3
git remote -v #查看现有的远程仓库的地址
git remote set-url origin git@github.com:LuckyKoala/JavaEnhance.git #修改地址
# 原来的地址是 https://github.com/LuckyKoala/JavaEnhance.git

这样下次push时就不用再验证了。

更改

1
2
3
4
5
git status #查看当前状态
git add <files> ... #添加指定文件到暂存区
git add -A #添加所有文件到暂存区
git commit -m <message> #提交更改并设置信息
git commit -a -m <message> #添加所有更改并设置信息

修改commit

1
2
3
4
5
6
git commit --amend -m "new message" #直接修改信息
git rebase -i HEAD~<n> #展示最近n次commit并进入交互式rebase
git push --force #推送修改到远程repo(强制覆盖)
# 添加文件
git add new-file
git commit --amend

日志

查看当前文件和最近提交的文件比较
git diff HEAD

查看暂存区文件和最后提交的文件比较
git diff --staged

查看提交日志
git log

分支

1
2
3
4
5
git branch #查看分支列表
git checkout -b <branchName> #新建分支并签出
git checkout <branchName> #签出指定分支
git branch -d <branchName> #删除指定分支
git merge <branchName> #合并当前分支

新建一个和源分支没有关系,但是保留工作文件的分支

1
2
3
4
git checkout master #签出到源分支
git checkout --orphan foo #签出到foo分支,不保留其和源分支的关系以及commit历史

git rm --cached $(git ls-files) #其中git ls-files只列出在索引中的文件,所以这条命令的作用就是移除所有在索引中的文件

远程repo

查看远程分支
git branch -r

配置远程repo

1
2
3
git remote -v #查看
git remote add <name> <url>
#例如 git remote add origin https://github.com/xx/xxxx.git

推送到远程repo

1
2
3
4
git push -u <remoteName> <remoteBranchName> 
#u参数代表set-upstream,会将当前分支和该远程分支绑定,下次再推送就可以只输入git push了
git push #使用默认设置推送
git push <remoteName> <remoteBranchName> #推送到指定远程分支

1
2
git fetch #从远程仓库取回所有分支并更新本地对应的引用
git pull #即git fetch然后git merge,建议是这两个命令分别执行

删除远程repo的分支
git push <remoteName> --delete <branchName>

若错误提示带有”[remote rejected] refactor (refusing to delete the current branch”这句话,你需要检查远程库对主分支的设置(Github则是在repository对应的设置中找到Branches子项,然后修改其中的默认分支即可解决问题)。

标签

1
2
3
4
5
6
7
git tag #列出所有标签
git tag -a <tagName> -m <tagMessage> #创建注释标签
git tag <tagName> #轻量级标签
git push <remoteName> <tagName> #将指定标签共享至远程仓库
git push <remoteName> --tags #将所有标签共享至远程仓库
git checkout <tagName> #签出指定标签
git checkout -b <branchName> <tagName> #从指定标签创建分支并签出新分支

回退

将文件撤出提交区
git reset files ...

将文件还原到上次提交的状态
git checkout -- <target>

暂存修改

1
2
3
git stash      #暂存
git stash pop #还原
git stash show #列表