git使用小结
本地创建密钥
$ ssh-keygen -t rsa -C "xxxxxx@qq.com"
生成的密钥windows位于 C:\Users\Administrator.ssh,id_rsa是私钥文件 ,id_rsa.pub是公钥文件
linux密钥位于 /root/.ssh
常用命令
查看日志
$ git log
# 为了更友好的显示,使用下面的命令
$ alias gitlog="git log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative"
$ gitlog
# 查看某文件更新历史
$ git log --pretty=oneline <文件名>
# 查看某文件的历史修改内容
$ git log -p <文件名>
# 查看某次提交更新内容
$ git show <commit版本号>
# 查看某次提交更新的文件
$ git show --name-only <commit版本号>
# 比较文件的修改
$ git diff <文件名>
# 比较两次提交有哪些修改
$ git diff <commit版本号> <commit版本号> [--stat]
# 注:版本号可以用 HEAD ,不加 `--stat` 是具体内容的修改
远程库
# 添加
$ git remote add [origin] <远程地址>
# 克隆
$ git clone <远程地址>
# 删除
$ git remote remove [origin]
# 查看
$ git remote get-url [origin]
# 更改
$ git remote set-url [origin] <远程地址>
# 创建远程版本库
$ git init --bare <sample.git>
# 拉取远程库
$ git pull [origin] [master]
# 推送到远程库
$ git push [origin] [master]
本地
# 创建本地版本库
$ git init
# 查看状态
$ git status
# 添加
$ git add [文件名]
# 不加参数 -> 添加修改过和添加的文件(change|add)
# -A -> 添加修改过和删除过的文件(change|delete)
# -all -> 添加所有文件(change|delete|add)
# 提交文件
$ git commit -m "<说明>"
# 没有删除过文件,可以合并添加与提交为一步
$ git commit -am "<说明>"
# 撤销缓存区的某文件、取消git记录
$ git rm --cached <文件名>
$ git rm -r --cached <文件夹>
# 撤销文件修改
$ git checkout -- <文件名>
# 若已添加到缓存区,则恢复到添加至缓存区之后的状态
# 若文件自修改后未添加至缓存区,则恢复到版本库状态
# 忽略文件权限的更改
$ git config core.filemode false
# 已经加入版本控制的文件强制忽略
$ git update-index --assume-unchanged <文件名>
分支
# 查看分支
$ git branch [-va]
# -a 包含远程分支
# -v 显示最后提交信息
# 添加分支
$ git branch <分支名>
# 添加分支会继承所在分支
$ git branch -b <分支名> <继承的分支>
# 相当于先切换,再添加
# 从远程分支添加并跟踪
$ git checkout -t origin/<远程分支名>
# 切换分支
$ git checkout <分支名>
# 合并分支
$ git merge <分支名>
# 删除分支
$ git branch -d <分支名>
# 删除远程分支
$ git push origin :<分支名>
# 删除远程已经删除过的分支
$ git remote prune origin
# 设置跟踪远程某分支
$ git branch -u <远程分支> [本地分支]
# 查看分支跟踪关系
$ git branch -vv
# 捡取提交记录
$ git cherry-pick <提交记录>
$ git cherry-pick <提交记录1> <提交记录2>
$ git cherry-pick <提交记录1>..<提交记录2>
# 两次提交记录之间的所有,不含记录1
$ git cherry-pick <提交记录1>^..<提交记录2>
# 两次提交记录之间的所有,含记录1
案例
多次无效的提交彻底清理
# 先确保本地分支内容是最新的
$ git pull --rebase
# 以不同的方式rebase到指定位置
$ git rebase -i <commit版本号>
$ git rebase -i HEAD~3
# 手动将要删除的提交pick改为drop
# 结束后覆盖远程记录,建议后者在强制覆盖之前检查状态
$ git push --force
$ git push --force-with-lease
# 其他本地分支同步
$ git pull --rebase
```