很早之前就用过 Git,SVN。这样来回切换,一些命令总是忘或者弄混淆了,这里主要备忘一下。
1,通用配置
git config --global user.name "lulei"
git config --global user.email mill0426@163.com
2,下载远程仓库
2.1,直接下载
打开对应目录,直接clone
cd /Users/lulei/Work/GitWork
git clone miLLlulei/AnnotationProcessor
说明:会自动创建AnnotationProcessor目录的。
2.2,先 init,再关联远程仓库
打开对应目录,先 init,再关联远程仓库
cd /Users/lulei/Work/GitWork/AnnotationProcessor
git init
git remote add origin miLLlulei/AnnotationProcessor
git pull origin master
说明:origin:本地仓库名 master:远程分支名
3,分支
3.1,查看当前分支
git branch 或者 git branch -vv
如图,前面带 * 的是当前分支;
3.2,切换分支
git checkout master
3.3,创建分支
git branch testing
3.4,删除分支
git branch -d testing
4,提交
4.1,查看变更文件
git status
4.2,添加文件
git add <文件名>
git add .
. 代表所有目录|文件
4.3,提交文件
git commit -m "提交信息"
4.4,暂存,保存至堆栈区
当前分支有过修改,又不想提交,可以暂存再切到另外分支:
git stash
回来,还原修改:
git stash pop
5,合并
5.1,拉取
git pull <远程在本地库名> <远程分支名>:<本地分支名>
例子:把远程分支 master 拉取合并到 本地分支 dev_lulei
git pull origin master:dev_lulei
如果本地分支和远程分支关联了,可以直接 git pull
如何关联本地分支和远程分支:
确定当前本地分支是 dev_lulei,
git push --set-upstream origin dev_lulei
说明:origin:远程在本地的仓库名
dev_lulei:远程分支名
5.2,查看远程仓库在本地的名称,一般都是 origin
git remote
5.3,推送
git push <远程在本地库名> <本地分支名>:<远程分支名>
5.3,冲突
pull 之后可能会文件冲突,这时候可以用: git mergetool
5.4,查看提交历史
git log --pretty=format:"%h - %an, %ar : %s"
按 q,退出查看
5.5,合并
git merge master
当前分支是 dev_lulei, 把 master 分支合并到 dev_lulei。
5.6,删除缓存
git rm --cached <文件名>
有时候先使用 git add . 把所有代码添加到缓存了,但是有个别文件不想提交,可以再删除掉缓存。
5.7,已经commit了,回滚
git reset --hard <提交记录ID>
# --hard:会把文件修改的内容全部还原
# 提交记录ID:可以用 git log 查看。
5.8,没有add和commit,还原
# 还原某个文件到某个版本:
git checkout <提交记录ID> <文件名>
# 还原某个文件到上个版本:
git checkout -- <文件名>
# 还原所有文件到上个版本:
git checkout .
5.9,永久删除文件,包括历史提交记录
# 删除某个文件 -- Test 目录下的 test.txt
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch Test/test.txt' --prune-empty --tag-name-filter cat -- --all
# 删除某个目录 -- Test 目录
git filter-branch --force --index-filter 'git rm --cached -r --ignore-unmatch Test' --prune-empty --tag-name-filter cat -- --all
# 推送到远端,这步是不可逆的,注意备份源码
git push origin master --force --all
# 推送到你的所有 tag
git push origin master --force --tags
# 清除本地仓库 objects,这个是可选操作,因为不弄,等待gc也会清除的。
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now