git 版本控制工具

生成ssh公钥

ssh-keygen -o
cat ~/.ssh/id_rsa.pub

初始配置

git config --global user.name "xxx"
git config --global user.email "xxx"

常用指令

git remote -v
git remote add origin https://...
git commit --amend
git rebase -i HEAD~3
git push origin --delete branchName
git branch -M newName
git symbolic-ref --short -q HEAD // 在ci中获取当前分支名,如果是gitlab,直接用系统环境变量: CI_COMMIT_REF_NAME
git status -s // 检测当前工作区或者暂存区是否有内容,一般是在脚本中判断当前工作区是否干净

查找某个文件的删除记录

前提是知道文件路径: git log -1 --stat -- ./src/views/some.js

误删除恢复

误删除、丢失commit或者drop,如果知道commitId,直接cherry-pick就行。

如果没有commitId,解决办法:

  1. git fsck --lost-found >> 1.txt或者git fsck --unreachable >> 2.txt,将所有被删除的commitId汇总起来
  2. 用脚本输出commit信息:
    #!/bin/sh
    READFILENAME="1.txt"      #上步文件名【1.txt dangling commit,2.txt对应unreachable commit】
    RETFILENAME="./详情.txt"   #筛选结果文件名
    while read -r line       
    do 	
    	VAR=`echo $line | awk '/dangling commit/ {print $3}'`
    	if [ $VAR ]; then
    		git show $VAR >> $RETFILENAME    
    		echo "-------------------------------------\n" >>$RETFILENAME #每条记录用---分割开
    	fi
    done < $READFILENAME
  3. 查询结果文件,一般通过commit时间就可以快速定位到指定的提交。
  4. 找到丢失的commit之后,直接用git stash apply xxxxx就行。

获取个人一段时间内的commit

切到master分支,用这个命令筛选7月以来自己本项目的commit输出到txt,准备述职有可能用得上:

git log --author="李大力" --oneline --pretty=format:"%h - %an, %ad : %s" --date=format-local:'%Y-%m-%d %H:%M:%S' --after=2023-06-30 --no-merges > 1.txt

填名字的地方也可以用邮箱代替