git操作

2023-11-30 16:31:48 浏览数 (1)

配置

  1. 显示当前的Git配置
    • git config --list
  2. 编辑Git配置文件
    • git config -e
  3. 设置用户名和邮箱
    • git config --global user.name "Rolle"
    • git config --global user.email "i@liangyouze.com"
  4. 初始化仓库(在对应目录下)
    • git init

代码提交

  1. 添加指定文件到暂存区
    • git add file1 file2 file3
  2. 添加指定目录到暂存区,包括子目录
    • git add dir
  3. 添加当前目录的所有文件到暂存区
    • git add .
  4. 删除工作区文件,并且将这次删除放入暂存区
    • git rm file1 ...
  5. 停止追踪指定文件,但该文件会保留在工作区
    • git rm --cached file
  6. 重置提交备注信息
    • git commit --amend
    • git commit --amend -m "New commit message"
  7. 对比两个分支的不同,并导出到 diff.txt 文件中(覆盖 原来 diff.txt 文件内容)
  8. git diff branchA > diff.txt
  9. 对比两个分支的不同,并导出到 diff.txt 文件中(追加到 diff.txt 文件内容)
  10. git diff branchA >> diff.txt

分支

  1. 前仓库中存在的所有分支列表
    • git branch
  2. 查看远程分支
    • git branch -r
  3. 列出所有本地分支和远程分支
    • git branch -a
  4. 创建分支
    • git branch branchName
  5. 新建一个分支,并切换到该分支
    • git checkout -b branch
  6. 切换分支
    • git checkout branchName
  7. 删除本地分支
    • git branch -d branchName
  8. 删除远程分支
    • git push origin --delete xxxx
  9. 将分支dev与当前分支进行合并
    • git merge origin/dev
  10. 新建一个分支,指向指定commit
  11. git branch branchName commit
  12. 合并dev分支到master
  13. git merge dev
  14. 选择一个commit,合并进当前分支
  15. git cherry-pick commit
  16. 从git的某次提交(commit)拉取分支
  17. git checkout commitId -b branchname
  18. 删除本地标签
  19. git tag -d tagName
  20. 删除远程标签
  21. git push origin -d tag-name

撤销

  1. 撤销一个合并
    • git reset --hard HEAD
  2. 恢复暂存区的指定文件到工作区
    • git checkout file
  3. 重置暂存区与工作区,与上一次commit保持一致
    • git reset --hard
  4. 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
    • git reset --hard 1094a    
  5.  撤销工作区的修改(一键还原,可以恢复误删除的,前提是还没提到暂存区)
    • git chekout -- fileName

比较

  1. 比较两个版本差异
    • git diff master..test
  2. 当前工作目录和上次提交与本地索引之间的差异
    • git diff
  3. 当前分支与其他分支的不同
    • git diff test
  4. 查看工作区和版本库里面最新版本的区别:
    • git diff HEAD -- current.txt

存储

  1. 存储当前状态
    • git stash 'work'
  2. 恢复(恢复的同时把stash内容也删了)
    • git stash pop
  3. 恢复指定的stash
    • 先 git stash list
    • git stash apply stash@{0}
  4. 创建一个标签
    • git tag v1.0
  5. 给之前的commit打上一个标签
    • git tag v1.0 f534324
  6. 查看tag
    • git tag
  7. 查看标签信息
    • git show v1.0
  8. 删除标签
    • git tag -d v1.0
  9. 推送到远程标签
    • git push origin v1.0

查看信息

  1. 显示有变更的文件
    • git status
  2. 显示当前分支的版本历史
    • git log
    • git log --oneline
  3. 显示commit历史,以及每次commit发生变更的文件
    • git log --stat
  4. 查看分支合并图
    • git log --graph
  5. 显示所有提交过的用户,按提交次数排序
    • git shortlog -sn
  6. 显示指定文件是什么人在什么时间修改过
    • git blame file
  7. 显示今天你写了多少行代码
    • git diff --shortstat "@{0 day ago}"
  8. 显示某次提交的元数据和内容变化
    • git show commit
  9. 将本地分支推动到远程分支
    • git push origin feature-branch:feature-branch //推送本地的feature-branch(冒号前面的)分支到远程origin的feature-branch(冒号后面的)分支(没有会自动创建)
  10. 把远程分支拉到本地
  11. git fetch origin dev(dev为远程仓库的分支名)
  12. 查看提交线
  13. git log --graph --pretty=oneline --abbrev-commit
  14. 统计个人代码量
  15. git log --author="youze" --pretty=tformat: --numstat | awk '{ add = $1; subs = $2; loc = $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %sn", add, subs, loc }' -
  16. 查看排名前5的贡献者
  17. git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5

奇淫技巧

  1. git fetch --all && git reset --hard origin/master
    • git fetch --all && git reset --hard origin/master
  2. 展示本地仓库中任意两个 commit 之间的文件变动:
    • git diff <commit-id> <commit-id>
  3. 输出暂存区和本地最近的版本 (commit) 的 different (不同)
    • git diff --cached
  4. 输出工作区暂存区 和本地最近的版本 (commit) 的 different (不同)。
    • git diff HEAD
  5. 快速切换到上一个分支
    • git checkout -
  6. 删除已经合并到 master 的分支
    • git branch --merged master | grep -v '^*|  master' | xargs -n 1 git branch -d
  7. 关联远程仓库(都行)
    • git branch -u origin/mybranch
    • git push origin/mybranch -u
  8. 重命名本地分支
    • git branch -m <new-branch-name>
  9. 放弃所有修改:
    • git checkout .
  10. 以新增一个 commit 的方式还原某一个 commit 的修改
  11. git revert <commit-id>
  12. 删除所有的stash
  13. git stash clear
  14. 配置多个remote(方便从不同的分支上拉取)
  15. git remote add originname1 https://origin1.com/project.git
  16. git remote add originname2 https://origin2.com/project.git
  17. 拉取远程fork到本地 git pull originname2 master(远程分支)
  18. 统计某人代码提交量
  19. git log --author="xxxxxxxxxxxxx" --pretty=tformat: --numstat | awk '{ add = $1; subs = $2; loc = $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %sn", add, subs, loc }' -
  20. 统计所有人代码提交量
  21. git log --format='%aN' | sort -u | while read name; do echo -en "$namet"; git log --author="$name" --pretty=tformat: --numstat | grep "(.html|.java|.xml|.properties|.css|.js|.txt)$" | awk '{ add = $1; subs = $2; loc = $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %sn", add, subs, loc }' -; done
  22. 统计某时间范围内的代码提交量
  23. git log --author=mengfanxiao --since=2019-01-01 --until=2021-02-01 --format='%aN' | sort -u | while read name; do echo -en "$namet"; git log --author="$name" --pretty=tformat: --numstat | grep "(.html|.java|.xml|.properties)$" | awk '{ add = $1; subs = $2; loc = $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %sn", add, subs, loc }' -; done
  24. 查看git提交前5名
  25. git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5

17 清楚已删除的远端分支

  • git fetch -p
  • 删除所有已合并的分支(除了 master|dev 分支) (还没尝试)
  • git branch --merged | egrep -v "(^*|master|dev)"
  • 删除所有已合并的本地分支(除了 master|dev 分支) (还没尝试)
  • git branch --merged | egrep -v "(^*|master|dev)" | xargs git branch -d

提交规范

先来看看公式:

| <type>(<scope>): <subject> |

| --- |

  • feat:新功能(feature)
  • fix:修补bug
  • docs:文档(documentation)
  • style: 格式(不影响代码运行的变动)
  • refactor:重构(即不是新增功能,也不是修改bug的代码变动)
  • test:增加测试
  • chore:构建过程或辅助工具的变动

scope

  • 用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。

subject

是 commit 目的的简短描述,不超过50个字符。

fork的项目如何同步仓库源的最新更新

代码语言:text复制
//查看项目远程仓库配置,如果没有源的地址则新增
git remote -v
//添加源项目地址
git remote add tata(随便一个名称) url(源项目名称) 
//确认是否添加成功
git remote -v
//获取源项目的更新
git fetch tata
//查看所有分支
git branch
//合并tata/master分支的变化到本地master分支
git merge tata/master
//这里仅将fork源仓库更新到本地仓库,如果要更新远程fork仓库,必须向远程push一次
git push origin master

多次提交合并

参考

廖雪峰

Git的奇技淫巧

Git 常用指令 & 技巧

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞