Git是一种分布式版本控制系统,用于管理计算机上的文件和源代码。它由Linus Torvalds为了帮助管理Linux内核开发而创建,现在广泛应用于许多其他项目中。
一、Git的下载与安装
1.git的下载
需要去 Git 官网下载对应系统的软件了,下载地址为 git-scm.com或者gitforwindows.org,或者阿里镜像
2.git的安装
这里下载的版本是 Git-2.40.0-64-bit.exe
,可以根据需要下载对应的版本,接下来我们就对这个版本进行安装
2.1 双击下载后的 Git-2.40.0-64-bit.exe
,开始安装,这个界面主要展示了 GPL 第 2 版协议1的内容,点击 [next] 到第二步。
2.2 可点击 “Browse…” 更换目录,也可直接在方框里面改,我一般直接将 “C” 改为 “D”,这样就直接安装在 D 盘里了。点击 [next] 到第三步。
2.3 图中这些英文都比较简单,我已经把大概意思翻译出来了,大家根据自己的需要选择勾选。点击 [next] 到第四步。
注:最后一个选项打勾的话,需要下载 Windows Terminal 配合 Git Bash使用
,如图:
2.4 方框内 Git 可改为其他名字,也可点击 “Browse...
” 选择其他文件夹或者给"Don't create a Start Menu folder
" 打勾不要文件夹,点击 [next] 到第五步。
安装成功后点击开始菜单里的图如下可以看到git bash等图标:
2.5 Git 安装程序里面内置了 10 种编辑器供你挑选,比如 Atom、Notepad、Notepad++、Sublime Text、Visual Studio Code、Vim 等等,默认的是 Vim ,选择 Vim 后可以直接进行到下一步,但是 Vim 是纯命令行,操作有点难度,需要学习。如果选其他编辑器,则还需要去其官网安装后才能进行下一步。
下图为默认编辑器 Vim
.可直接点击 [next] 到第六步。
如果你不想用 Vim
当默认编辑器,换一个,比如 Notepad++
,那么你者需要点击下面的蓝色字体 " Notepad++ " 去其官网下载安装好才能进行下一步 [next].
安装后还要配置在我的电脑->属性->高级系统设置->高级->环境变量->系统变量->Path->编辑添加 Notepad++ 的安装地址,如 C:\Program Files\notepad++.
这样才能在 Git Bash 里面直接调用 Notepad++.
$ notepad++ 文件名.后缀 //在 git bash 调用 notepad++ 打开文件
新手建议使用 Notepad++ 、Sublime Text,这两个比 Windows 自带的记事本功能多太多了。点击 [next] 到第六步。
2.6 第一种是让 Git 自己选择,名字是 master
,但是未来也有可能会改为其他名字;第二种是我们自行决定,默认是 main
,当然,你也可以改为其他的名字。一般默认第一种,点击 [next] 到第七步。
2.7 调整你的 path 环境变量
第一种是仅从 Git Bash 使用 Git。这个的意思就是你只能通过 Git 安装后的 Git Bash 来使用 Git ,其他的什么命令提示符啊等第三方软件都不行。
第二种是从命令行以及第三方软件进行 Git。这个就是在第一种基础上进行第三方支持,你将能够从 Git Bash,命令提示符(cmd) 和 Windows PowerShell 以及可以从 Windows 系统环境变量中寻找 Git 的任何第三方软件中使用 Git。推荐使用这个。
第三种是从命令提示符使用 Git 和可选的 Unix 工具。选择这种将覆盖 Windows 工具,如 “ find 和 sort ”。只有在了解其含义后才使用此选项。一句话,适合比较懂的人折腾。
2.8 选择 SSH 执行文件
2.9 选择HTTPS后端传输
2.10 配置行尾符号转换
2.11 配置终端模拟器以与 Git Bash 一起使用
2.12 选择默认的 “git pull” 行为
2.13 选择一个凭证帮助程序
2.14配置额外的选项
2.15 配置实验性选项
上面是实验性功能,可能会有一些小错误之类的,建议不用开启。
点击 [install] 进行安装。
二、Git的主要特点
1.分布式
Git采用分布式存储模型,每个克隆库(包括本地和远程库)都具有完整的版本历史记录和文件副本。这意味着即使某个节点离线或丢失,其他节点仍然可以继续工作并共享数据。
2.版本控制
Git可以记录文件和代码的修改历史,并提供回滚和比较功能。它通过使用提交(commit)来组织修改记录,每次提交都可以理解为一次版本发布。
3.分支管理
Git支持创建和管理多个分支,每个分支可以独立地修改和提交。这使得不同的团队或开发者可以同时处理不同的功能开发,而不影响彼此的工作。
4.合并与冲突解决
当多个分支同时进行修改时,可能会发生冲突。Git提供了强大的合并和冲突解决功能,可以自动合并相互独立的修改,或者提示用户手动解决冲突。
5.快照管理
Git将文件和目录的状态视为一系列快照,而不是基于差异。这意味着每个提交都包含了所有文件的完整拷贝,而不是相对于上一个版本的差异。
6.可扩展性
Git的设计允许用户在不同的层次上添加自定义功能或工具,如钩子、插件、子模块等。
7.开源
Git是一个开源项目,可以自由获取和修改源代码。同时也有广泛的社区支持和生态系统,提供了许多有用的工具和扩展。
三、Git的常用命令
git init # 初始化本地git仓库(创建新仓库) git config --global user.name "xxx" # 配置用户名 git config --global user.email "xxx@xxx.com" # 配置邮件 git config --global color.ui true # git status等命令自动着色 git config --global color.status auto git config --global color.diff auto git config --global color.branch auto git config --global color.interactive auto git config --global --unset http.proxy # remove proxy configuration on git git clone git+ssh://git@192.168.53.168/VT.git # clone远程仓库 git status # 查看当前版本状态(是否修改) git add xyz # 添加xyz文件至index git add . # 增加当前子目录下所有更改过的文件至index git commit -m 'xxx' # 提交 git commit --amend -m 'xxx' # 合并上一次提交(用于反复修改) git commit -am 'xxx' # 将add和commit合为一步 git rm xxx # 删除index中的文件 git rm -r * # 递归删除 git log # 显示提交日志 git log -1 # 显示1行日志 -n为n行 git log -5 git log --stat # 显示提交日志及相关变动文件 git log -p -m git show dfb02e6e4f2f7b573337763e5c0013802e392818 # 显示某个提交的详细内容 git show dfb02 # 可只用commitid的前几位 git show HEAD # 显示HEAD提交日志 git show HEAD^ # 显示HEAD的父(上一个版本)的提交日志 ^^为上两个版本 ^5为上5个版本 git tag # 显示已存在的tag git tag -a v2.0 -m 'xxx' # 增加v2.0的tag git show v2.0 # 显示v2.0的日志及详细内容 git log v2.0 # 显示v2.0的日志 git diff # 显示所有未添加至index的变更 git diff --cached # 显示所有已添加index但还未commit的变更 git diff HEAD^ # 比较与上一个版本的差异 git diff HEAD -- ./lib # 比较与HEAD版本lib目录的差异 git diff origin/master..master # 比较远程分支master上有本地分支master上没有的 git diff origin/master..master --stat # 只显示差异的文件,不显示具体内容 git remote add origin git+ssh://git@192.168.53.168/VT.git # 增加远程定义(用于push/pull/fetch) git branch # 显示本地分支 git branch --contains 50089 # 显示包含提交50089的分支 git branch -a # 显示所有分支 git branch -r # 显示所有原创分支 git branch --merged # 显示所有已合并到当前分支的分支 git branch --no-merged # 显示所有未合并到当前分支的分支 git branch -m master master_copy # 本地分支改名 git checkout -b master_copy # 从当前分支创建新分支master_copy并检出 git checkout -b master master_copy # 上面的完整版 git checkout features/performance # 检出已存在的features/performance分支 git checkout --track hotfixes/BJVEP933 # 检出远程分支hotfixes/BJVEP933并创建本地跟踪分支 git checkout v2.0 # 检出版本v2.0 git checkout -b devel origin/develop # 从远程分支develop创建新本地分支devel并检出 git checkout -- README # 检出head版本的README文件(可用于修改错误回退) git merge origin/master # 合并远程master分支至当前分支 git cherry-pick ff44785404a8e # 合并提交ff44785404a8e的修改 git push origin master # 将当前分支push到远程master分支 git push origin :hotfixes/BJVEP933 # 删除远程仓库的hotfixes/BJVEP933分支 git push --tags # 把所有tag推送到远程仓库 git fetch # 获取所有远程分支(不更新本地分支,另需merge) git fetch --prune # 获取所有原创分支并清除服务器上已删掉的分支 git pull origin master # 获取远程分支master并merge到当前分支 git mv README README2 # 重命名文件README为README2 git reset --hard HEAD # 将当前版本重置为HEAD(通常用于merge失败回退) git rebase git branch -d hotfixes/BJVEP933 # 删除分支hotfixes/BJVEP933(本分支修改已合并到其他分支) git branch -D hotfixes/BJVEP933 # 强制删除分支hotfixes/BJVEP933 git ls-files # 列出git index包含的文件 git show-branch # 图示当前分支历史 git show-branch --all # 图示所有分支历史 git whatchanged # 显示提交历史对应的文件修改 git revert dfb02e6e4f2f7b573337763e5c0013802e392818 # 撤销提交dfb02e6e4f2f7b573337763e5c0013802e392818 git ls-tree HEAD # 内部命令:显示某个git对象 git rev-parse v2.0 # 内部命令:显示某个ref对于的SHA1 HASH git reflog # 显示所有提交,包括孤立节点 git show HEAD@{5} git show master@{yesterday} # 显示master分支昨天的状态 git log --pretty=format:'%h %s' --graph # 图示提交日志 git show HEAD~3 git show -s --pretty=raw 2be7fcb476 git stash # 暂存当前修改,将所有至为HEAD状态 git stash list # 查看所有暂存 git stash show -p stash@{0} # 参考第一次暂存 git stash apply stash@{0} # 应用第一次暂存 git grep "delete from" # 文件中搜索文本“delete from” git grep -e '#define' --and -e SORT_DIRENT git gc git fsck
四、Git的简单使用
1.打开git bash
2.远程仓库配置
远程仓库有很多,比如github,国内的码云,局域网自建git服务器,托管在其他地方的服务器,本文以github为例
**网址:**https://github.com
注册账户: 类似普通的网站新用户注册,使用邮箱注册即可。
新建仓库: 点击右上角,加号,new repository
建立好的仓库
3.生成SSH
用户名
git config --global user.name "注册名"
邮箱
git config --global user.email "注册邮箱"
生成SSH(以有SSH可以跳过这一步)
ssh-keygen -t rsa -C "自己的邮箱"
SSH文件存放在C:/User/用户/.ssh下,id_rsa为私钥,id_rsa.pub为公钥。
4. github配置SSH
打开id_rsa.pub文件,全选,复制全文
github->账户->setting
选择SSH and GPGkeys,New SSH key
自定义一个title,然后粘贴从公钥文件中拷贝的key
测试SSH连接
ssh -T git@github.com
按照提示输入yes,回车,提示successfully之类的就说明SSH连接正常,github上的钥匙也会变成绿色
至此,本地git客户端和远程github建立了联系。
5.建立本地仓库
新建一个文件夹
git bash中执行命令,将该文件夹初始化为一个仓库
git init
结束以后在文件夹下面会出现一个隐藏的文件夹.git,没有的话,设置一下文件夹选项,显示隐藏文件
6.文件推送到远程仓库
在远程建立好仓库,本地进行clone,然后再添加新文件,最后推送至远程。这样的步骤对新手比较友好。如:事先在github建立了仓库,bysj,并新建了README文件,此时远程仓库中只有这一个文件。
clone远程至本地
git clone git@github.com:用户名/仓库名.git
将远程的bysj仓库及其中的README文件clone至本地
然后,向bysj文件夹中手动添加了doc,src,WebContent三个文件夹及其中的子文件夹和文件等。可以用ls命令查看bysj文件夹下的文件,可以看到有一个文件,三个文件夹,使用命令进行
add
git add 文件夹1/ 文件夹2/
add有多种形式,可以add某个文件,某个文件夹,或直接add当前仓库下所有文件
git add 单个文件
git add 文件夹1/ 文件夹2/ ……多个文件夹之间空格隔开
git add .
commit
git commit -m “注释”
push
git push -u origin master
成功推送至远程仓库bysj,三个文件夹,一个README文件。
7.总结:如何推送文件至远程?
①建立本地仓库
②与远程建立连接,测试
ssh -T git@github.com
③init命令初始化仓库
git init
④手动拷贝文件,并执行add命令
git add 文件夹1/ 文件夹2/
⑤commit命令
git commit -m “注释”
⑥push命令
git push -u origin master