Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。是现代软件开发中不可或缺的工具之一,它通过其强大的分支管理、快速的操作和高效的协作能力,极大地促进了团队的开发效率和代码管理的便利性。
Git易于学习,占地面积小,性能极快。它具有廉价的本地库,方便的暂存域和多个工作流分支等特性。由Linus Torvalds为了管理Linux内核开发而创建。
Git下载安装地址:https://git-scm.com/
版本控制是一种记录文件内容变化的系统,它允许用户查阅特定版本的修订历史。通过记录文件修改的详细历史,版本控制使得用户能够轻松查看和管理项目的不同版本,便于需要时进行版本切换和比较。
版本控制系统中的客户端并非简单地提取最新版本的文件快照,而是将整个代码仓库完整地镜像到本地。因此,每次文件的提取操作实际上都是对整个文件仓库的完整备份。这种方式使得即使发生了文件损坏或其他问题,也可以通过其他客户端的本地仓库进行快速恢复,确保项目数据的安全和稳定性。
在 Git 中,分支是指向 Git 仓库中特定提交对象(commit)的可变指针。每个分支代表项目开发过程中的一个独立路径,允许开发人员并行进行不同的工作,而无需影响主线(主分支)的稳定性和开发进度。
在版本控制过程中,当需要同时推进多个任务时,可以为每个任务单独创建分支。这样一来,开发人员可以将各自的工作与主任务分隔开来,而在开发自己的分支时不会影响到主分支的稳定性和进度。
分支的主要优势在于能够并行推进多个功能的开发,从而提升整体开发效率。每个分支在开发过程中是独立的实体,如果某个分支的开发失败或不符合预期,可以直接删除而不会对其他分支造成任何影响。
设置用户签名
git config --global user.name 用户名
git config --global user.email 邮箱
签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git首次安装必须设置一下用户签名,否则无法提交代码。
这里设置用户签名和将来登录GitHub(或其他代码托管中心)的账号没有任何关系。
了解所有Git配置
git config --list
初始化本地库
git init
查看当前所在分支(Windows PowerShell不显示,git bash则会出现在文件路径后面)
git branch --show
查看本地库状态
git status
添加文件到暂存区
git add 文件名
添加所有文件到暂存区
git add .
提交到本地库
git commit -m "日志信息"
撤销一次本地提交(暂存区保留,相当于已经git add但是未git commit)
git reset --sort HEAD~1
撤销两次本地提交(暂存区保留,相当于已经git add但是未git commit)
git reset --sort HEAD~2
撤销一次本地提交(工作区以及暂存区都撤销)
git reset --hard HEAD~1
撤销两次本地提交(工作区以及暂存区都撤销)
git reset --hard HEAD~2
查看历史记录
git reflog
版本穿梭
git reset --hard 版本号
显示提交历史
git log
创建分支
git branch 分支名
切换分支
git checkout 分支名
创建并切换分支
git checkout -b 分支名
删除本地分支(如果该分支还未合并到当前分支会出现警告)
git checkout -d 分支名
强制删除本地分支(直接删除)
git branch -D 分支名
查看所有分支(包括本地分支和远程分支)
git branch -a
查看本地分支最新提交信息
git branch -v
查看远端分支
git branch -r
合并其他分支
git merge 分支名
拉取远端代码
git clone 地址
本地分支获取远端最新更改
git pull
获取所有最新的分支和数据
git fetch
遇到冲突中止合并
git merge --abort
本地分支推送远端并建立连接
push -u origin 分支名
本地分支与远端分支建立连接
git push --set-upstream origin 分支名
本地分支推送远端连接的分支
git push
本地分支强制覆盖远端连接的分支
git push --force
本地分支推送远端目标分支
git rebase 分支名
删除远端分支
git push --delete origin 分支名
查看帮助
git --help
查看指定命令帮助
git 命令 --help
# 或者
git help 命令
如:git checkout --help 和 git help checkout
输入命令会打开网页端查看帮助信息。
查找一段时间内的提交记录
git log --since="开始时间" --until="结束时间"
查找一段时间内指定账号的提交记录
git log --since="开始时间" --until="结束时间" --author="账号名"
查找一段时间内指定账号的每次提交的变更行数
git log --since="开始时间" --until="结束时间" --author="账号名" --oneline --shortstat
查找一段时间内指定账号提交的变更行数总数
git log --since="开始时间" --until="结束时间" --author="账号名" --numstat --pretty="%H" | awk 'NF==3 {plus+=$1; minus+=$2} END {printf "Total lines added: %s, Total lines deleted: %s\n", plus, minus}'
查找一段时间内指定账号提交的次数
git log --since="开始时间" --until="结束时间" --author="账号名" --pretty='%ae' |sort |uniq -c
查找一段时间内分支合并次数
git log --since="开始时间" --until="结束时间" --merges --grep="Merge branch '分支名'" --pretty='%aN' | wc -l
场景一:新建分支首次上传代码
# 新建文件夹
# 克隆远程仓库到文件夹里
git clone 地址
# 进入克隆下来的文件目录
# 建立分支
# 创建并切换到本地分支
git checkout -b 分支名
# 如果远端没有同名分支,则推送本地分支到远程并建立跟踪关系
git push -u origin 分支名
# 如果远端有同名分支,则本地分支与远端分支建立连接
git push --set-upstream origin 分支名
# 提交代码
# 修改代码后添加到暂存区
git add .
# 提交到本地仓库
git commit -m "日志信息"
# 送本地修改到远程同名分支
git push
# 之后在页面申请合并主分支
场景二:已有项目与人合作协作上传代码
# 获取最新代码
# 切换主分支(一般是dev分支或者master分支)
git checkout 主分支名
# 获取最新主分支代码
git pull
# 切换本地个人开发分支
git checkout 分支名
# 合并最新主分支代码
git merge 主分支名
# 提交代码
# 修改代码后添加到暂存区
git add .
# 提交到本地仓库
git commit -m "日志信息"
# 送本地修改到远程同名分支
git push
# 之后在页面申请合并主分支