git 常用命令小结

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

```

参考链接

git版本管理策略及相关技巧