目录
一、Git简述
Git 是世界上使用最为广泛、最先进的一款免费、开源的分布式版本控制系统。
Git 最初由 Linux 系统内核的作者 Linus Torvalds 在 2005 年开始开发,目前已经是一个持续维护的成熟开源项目。如今,大量软件项目依赖 Git 进行版本管理,其中既有开源软件,也有商业软件,Git 在很多操作系统和集成开发环境(IDE)上都表现良好,Git 兼具大多数团队和个人开发者需要的功能、性能,安全性和灵活性。在目前的程序开发、应用开发等编译大环境中,绝大多数软件开发者或多或少都使用过 Git。
Git的设计理念主要包括以下几个重要特点:
- 分布式版本控制:Git不依赖于中央服务器,每个开发者都可以拥有完整的代码历史和版本信息。
- 哈希算法:Git使用SHA-1哈希算法来生成对象的名称,以确保完整性和数据的一致性。
- 快速性能:Git针对大规模项目进行了优化,能够在短时间内处理大量的版本控制操作。
- 分支管理:Git非常强大的分支管理功能,可以轻松创建、合并和切换分支,使多人协作开发变得更加灵活。
二、安装配置教程:
(一)Git安装
下载git官方安装包
检查Git是否安装成功,打开CMD 命令提示符窗口,输入git
到此,Git的安装完成,可以在开始菜单中看到Git的三个启动图标(Git Bash、Git CMD、Git GUI)
(二)环境变量配置
配置信息
进入git bath
①配置用户
git config --global user.name "username" //( "username"是自己的账户名,)
②配置邮箱
git config --global user.email "username@email.com" //("username@email.com"注册账号时用的邮箱)
获取默认配置,如果当前地址中仓库信息不存在,则查看全局,然后再读取系统配置
git config --list
- git config --local --list 本地仓库配置(高优先级)
- git config --global --list 全局用户配置(中优先级)
- git config --system --list 系统配置(低优先级)
git config --global --list查看配置
③Git生成密钥(ssh)
ssh-keygen -t rsa
运行命令时需要三次回车
在系统盘目录下(一般在 C:\Users\用户名.ssh)(mac: /Users/用户/.ssh)查看是否有.shh文件生成,此文件夹中以下两个文件
将ssh文件夹中的公钥( id_rsa.pub)添加到GitHub管理平台中,在GitHub的个人账户的设置中找到界面
完成填写,将公钥(id_rsa.pub)文件中内容复制粘贴到key中,然后点击Ass SSH key
安装配置完成
测试配置是否成功,在Git Bush命令框中输入以下命令
ssh -T git@github.com
若出现以上结果,则为配置成功
······到此,Git基本的安装及环境变量配置完成······
三、Git的基本操作
Git 的工作就是创建和保存你项目的快照及与之后的快照进行对比。
说明:
- workspace:工作区
- staging area:暂存区/缓存区
- local repository:版本库或本地仓库
- remote repository:远程仓库
(一)创建仓库命令
下表列出了 git 创建仓库的命令:
命令 | 说明 |
git init | 在当前目录新建一个Git代码库 |
git init [project-name] | 新建一个目录,将其初始化为Git代码库 |
git clone [url] | 拷贝一份远程仓库,就是下载一个项目和它的整个代码历史 |
(二)配置
Git的设置文件为.git config。所有config命令参数
语法: git config [<options>]
所有config命令参数
语法: git config [<options>]
①文件位置
- --global #use global config file 使用全局配置文件
- --system #use system config file 使用系统配置文件
- --local #use repository config file 使用存储库配置文件
- -f, --file <file> #use given config file 使用给定的配置文件
- --blob <blob-id> #read config from given blob object 从给定的对象中读取配置
②动作
- --get #get value: name [value-regex] 获得值:[值]名[正则表达式]
- --get-all #get all values: key [value-regex] 获得所有值:[值]名[正则表达式]
- --get-regexp #get values for regexp: name-regex [value-regex] 得到的值根据正则
- --get-urlmatch #get value specific for the URL: section[.var] URL 为URL获取特定的值
- --replace-all #replace all matching variables: name value [value_regex] 替换所有匹配的变量:名称值[ value_regex ]
- --add #add a new variable: name value 添加一个新变量:name值
- --unset #remove a variable: name [value-regex] 删除一个变量名[值]:正则表达式
- --unset-all #remove all matches: name [value-regex] 删除所有匹配的正则表达式:名称[值]
- --rename-section #rename section: old-name new-name 重命名部分:旧名称 新名称
- --remove-section #remove a section: name 删除部分:名称
- -l, --list #list all 列出所有
- -e, --edit #open an editor 打开一个编辑器
- --get-color #find the color configured: slot [default] 找到配置的颜色:插槽[默认]
- --get-colorbool #find the color setting: slot [stdout-is-tty] 发现颜色设置:槽[ stdout是TTY ]
③类型
- --bool #value is "true" or "false" 值是“真”或“假”。
- --int #value is decimal number 值是十进制数。
- --bool-or-int #value is --bool or --int 值--布尔或int
- --path #value is a path (file or directory name) 值是路径(文件或目录名)
④其它
- -z, --null #terminate values with NUL byte 终止值与null字节
- --name-only #show variable names only 只显示变量名
- --includes #respect include directives on lookup 尊重包括查找指令
- --show-origin #show origin of config (file, standard input, blob, command line) 显示配置(文件、标准输入、数据块、命令行)的来源
(三)提交与修改文件
命令 | 说明 |
---|---|
git add | 添加文件到暂存区 |
git status | 查看仓库当前的状态,显示有变更的文件。 |
git diff | 比较文件的不同,即暂存区和工作区的差异。 |
git commit | 提交暂存区到本地仓库。 |
git reset | 回退版本。 |
git rm | 将文件从暂存区和工作区中删除。 |
git mv | 移动或重命名工作区文件。 |
git checkout | 分支切换。 |
git switch (Git 2.23 版本引入) | 更清晰地切换分支。 |
git restore (Git 2.23 版本引入) | 恢复或撤销文件的更改。 |
(四)分支
命令 | 说明 |
---|---|
git branch | 列出所有本地分支 |
git branch -r | 列出所有远程分支 |
git branch -a | 列出所有本地分支和远程分支 |
git branch [branch-name] | 新建一个分支,但依然停留在当前分支 |
git checkout -b [branch] | 新建一个分支,并切换到该分支 |
git branch [branch] [commit] | 新建一个分支,指向指定commit |
git branch --track [branch] [remote-branch] | 新建一个分支,与指定的远程分支建立追踪关系 |
git branch --set-upstream [branch] [remote-branch] | 建立追踪关系,在现有分支与指定的远程分支之间 |
git merge [branch] | 合并指定分支到当前分支 |
git cherry-pick [commit] | 选择一个commit,合并进当前分支 |
git branch -d [branch-name] | 删除分支 |
git push origin --delete [branch-name] | 删除远程分支 |
git branch -dr [remote/branch] | 删除远程分支 |
(五)标签
命令 | 说明 |
---|---|
git tag | 列出所有tag |
git tag [tag] [commit] | 新建一个tag在指定commit |
git tag -d [tag] | 删除本地tag |
git push origin :refs/tags/[tagName] | 删除远程tag |
git show [tag] | 查看tag信息 |
git push [remote] [tag] | 提交指定tag |
git push [remote] --tags | 提交所有tag |
git checkout -b [branch] [tag] | 新建一个分支,指向某个tag |
(六)查看信息
命令 | 说明 |
---|---|
git status | 显示有变更的文件 |
git log | 显示当前分支的版本历史 |
git log --stat | 显示commit历史,以及每次commit发生变更的文件 |
git log -S [keyword] | 搜索提交历史,根据关键词 |
git log [tag] HEAD --pretty=format:%s | 显示某个commit之后的所有变动,每个commit占据一行 |
git log [tag] HEAD --grep feature | 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件 |
git log -p [file] | 显示指定文件相关的每一次diff |
git shortlog -sn | 显示所有提交过的用户,按提交次数排序 |
git show [commit] | 显示某次提交的元数据和内容变化 |
git show --name-only [commit] | 显示某次提交发生变化的文件 |
git blame [file] | 以列表形式查看指定文件的历史修改记录 |
git reflog | 显示当前分支的最近几次提交 |
(七)远程同步
命令 | 说明 |
---|---|
git remote | 列出当前仓库中已配置的远程仓库 |
git remote -v | 列出当前仓库中已配置的远程仓库,并显示它们的 URL |
git remote add [remote_name] [remote_url] | 添加一个新的远程仓库。指定一个远程仓库的名称和 URL,将其添加到当前仓库中 |
git remote rename [old_name] [new_name] | 将已配置的远程仓库重命名 |
git remote set-url [remote_name] [new_url] | 修改指定远程仓库的 URL |
git fetch | 从远程获取代码库 |
git pull git pull [远程主机名] [远程分支名]:[本地分支名] | 从远程获取代码并合并本地的版本 |
git push git push [远程主机名] [本地分支名]:[远程分支名] | 从将本地的分支版本上传到远程并合并 |
git push [remote] --force | 强行推送当前分支到远程仓库,即使有冲突 |
(八)撤销
命令 | 说明 |
---|---|
git checkout [file] | 恢复暂存区的指定文件到工作区 |
git checkout . | 恢复暂存区的所有文件到工作区 |
git reset [file] | 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变 |
git reset --hard | 重置暂存区与工作区,与上一次commit保持一致 |
git reset [commit] | 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变 |
git reset --hard [commit] | 从重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致 |
git reset --keep [commit] | 重置当前HEAD为指定commit,但保持暂存区和工作区不变 |
git revert [commit] | 后者的所有变化都将被前者抵消,并且应用到当前分支 |
git stash | 暂时将未提交的变化移除,稍后再移入 |