git基础教程与常用操作
git 快速入门教程
git 是版本控制软件。
版本控制的概念
版本控制是什么,为什么需要版本控制?
版本指若干文件内容所构成的整体,而控制指记录个整体以及变化。
举个例子: 当你再写一篇文章,写完之后就保存到电脑里面了。过了很久之后,再次打开发现措辞不当,进行了若干处修改。然后又过去一段时间,觉得上一次考虑不周,也许还是第一次的更好,此时你想回到第一次的版本。
而版本控制就是为了实现这样的目的:即可以保存任意状态下的文件内容,并且可以给出任意两种状态下差异。
有了版本控制,你就可以随心所欲的创作和修改。不用担心记不住的问题,版本控制可以帮你想要保存的任何状态,你可以回到任意的状态中。简而言之,在版本控制中,你可以任意拨弄“时间线”,回到“过去”,从“过去”穿越到“未来”。
版本控制软件不只有 git 还有其他的,例如 SVN,CVS 等,但最常用的就是 git。
安装配置
在电脑上安装 git 软件,并配置好 git 环境变量。
安装 git
git 官方地址:https://git-scm.com/downloads
git 镜像源地址:https://mirrors.tuna.tsinghua.edu.cn/github-release/git-for-windows/git/LatestRelease/
gitextension 软件网址(可选): https://gitextensions.github.io/
配置 git
推荐首先配置如下 git 全局参数:
# 全局配置git config --global user.name "name"git config --global user.email "name@xxx.com"下面的是可选配置:
# 配置默认编辑器git config --global core.editor vim# 配置颜色git config --global color.ui true# 配置别名git config --global alias.br branchgit config --global alias.ci commitgit config --global alias.co checkout# 配置文件编码为 utf-8git config --global i18n.commitEncoding utf-8git config --global i18n.logOutputEncoding utf-8配置 SSH (可选)
生成密钥步骤,在 git bash 中输入:
ssh-keygen -t rsa -C 'yourEmail@xx.com'一直回车过去,在系统默认路径 C:\Users<user name>.ssh 下生成 id_rsa.pub 和 id_rsa 文件。
然后将 id_rsa.pub 文件内容复制到 gitlab 网站上,添加 ssh key。
最后在本机执行:
ssh -T git@gitlab.com验证是否成功,就可以正常使用 git 命令了。
配置文件设置 (可选)
除了这种方式外,还可以直接在配置文件中设置参数。
| 类型 | 优先级 | 路径 |
|---|---|---|
| 仓库路径 | 高 | .git\config |
| 用户级别路径 | 中 | C:\Users\<user-name>\.gitconfig |
| 系统级别路径 | 低 | C:\Program Files\Git\etc\config |
典型的配置文件内容如下:
[user]name = nameemail = name@xxx.com[color]ui = true[alias]br = branchci = commitco = checkouttype = cat-file -tdump = cat-file -pst = statusunstage= reset HEAD --last = log -1 HEADvisual = !gitkhist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=shortEncoding = utf-8常用命令
git add file_namegit commit -m "some comment"git statusgit cnfig --listgit clone [url]git push origin HEAD:refs/for/master#str: hash author_name author_date commentgit log --pretty=format:"%h - %an, %ar : %s" --graphgit log --since=2.weeksgit push [remote-name] [branch-name]git config --global alias.ci commit #aliasgit config --global alias.last 'log -1 HEAD' #aliasgit checkout -b branch_name #创建分支并切换过去,等价于下面两行git branch branch_namegit checkout branch_name#创建修复分支并合并git checkout -b hotfix#做一些修复工作git add .git commit -m "做了一些修复工作"git checkout mastergit merge hotfixgit branch -d hotfix //master 移动到 hotfix 后,hotfix 就要删除掉git branch -f main HEAD~3git cherry-pick <提交号>git rebase --interactive//拉取远程仓库并合并到本地,然后上传git pull --rebasegit push
git reflog # 当使用 reset 后,使用 reflog 查看丢失的 log,可以根据哈希值回到 reset 之前git tag tage_name hash_id # 打标签# 代码带子模块git clone --recursive [address]# 已经下载仓库git submodule initgit submodule updategit 多账户配置 (可选)
# 为公司生成一对秘钥 ssh keyssh-keygen -t rsa -C 'yourEmail@xx.com' -f ~/.ssh/gitlab-rsa# 为 github 生成一对秘钥 ssh keyssh-keygen -t rsa -C 'yourEmail2@xx.com' -f ~/.ssh/github-rsa# 在~/.ssh 目录下新建名称为 config 的文件(无后缀名)。用于配置多个不同的 host 使用不同的 ssh key,内容如下:# gitlabHost gitlab.comHostName gitlab.comPreferredAuthentications publickeyIdentityFile ~/.ssh/gitlab_id-rsa# githubHost github.comHostName github.comPreferredAuthentications publickeyIdentityFile ~/.ssh/github_id-rsa# 配置文件参数说明# Host : Host 可以看作是一个你要识别的模式,对识别的模式,进行配置对应的的主机名和 ssh 文件# HostName : 要登录主机的主机名# User : 登录名# IdentityFile : 指明上面 User 对应的 identityFile 路径# 按照上面的步骤分别往 gitlab 和 github 上添加生成的公钥 gitlab_id-rsa.pub 和 github_id-rsa.pub# OK,大功告成,再次执行 git 命令验证是不是已经不需要再次验证权限了。# 再次查看~/.ssh 目录下的文件,会有 gitlab_id-rsa、gitlab_id-rsa.pub 和 github_id-rsa、github_id-rsa.pub 四个文件工作流程
首先克隆远程仓库:git clone [url],或从本地创建新仓库:git init
然后,在本地编辑文件,并提交到本地仓库:git add [file-name],git commit -m "commit message",
最后,推送到远程仓库:git push origin master,或其他分支:git push origin [branch-name]
仓库目录说明: .git 文件夹是索引文件,存放着版本信息,包括提交历史、暂存区、远程仓库等。
工作区:就是你在电脑里能看到的目录,通过编辑器打开的文件都在工作区。
.gitignore 文件:忽略不需要提交的文件的说明文件
FAQ
Q:克隆带子模块的仓库,如何下载子模块?
A:git clone 命令默认不会下载子模块,需要使用 —recursive 参数来下载子模块。例如:git clone --recursive [address],如果已经下载了仓库,那么只需要进入仓库,执行git submodule update --init --recursive,或者执行git fetch [url]
相关资源链接
| 项目 | URL |
|---|---|
| git 官网 | https://git-scm.com/ |
| git 镜像网址 | https://mirrors.tuna.tsinghua.edu.cn/github-release/git-for-windows/git/LatestRelease/ |
| gitextension | https://gitextensions.github.io/ |
常见问题
Q: 带模块的仓库,下载出错如何继续?
A: 进入仓库,执行=git submodule update —init —recursive=,或者执行=git fetch [url]=
A: 使用 hash 切换分支 git checkout <hash>
Q: 跳过检验,直接提前.
A: git commit --no-verify -m "aaa"
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!