Git
Git
git安装
在 Linux 上安装
- Centos(无维护):
sudo dnf install git-all
- Debian:
sudo apt install git-all
在 Windows 上安装
- 直接下载安装文件,别下载压缩包,压缩包没环境
- 源文件安装,比较麻烦,有必要就按需安装
初次运行git前的配置
用户信息
1 |
|
获取帮助
对于不清楚的命令直接帮助搜索就好了:git help <verb>
git基础
获取git仓库
- 将尚未进行版本控制的本地目录转换为 Git 仓库。
- 从其它服务器 克隆 一个已存在的 Git 仓库。
- 在已存在目录中初始化仓库
1 |
|
- 克隆现有的仓库
git clone https://
记录跟新
文件追踪流程:未追踪=>暂存状态;未修改状态=>修改状态=>暂存状态;暂存状态=>提交之后就会回到未修改状态,同时会删除未追踪的文件,更新为提交版本的文件了,这就是一个完整的文件循环流程。即像竹子一样节节高升,平稳推进。
跟踪新文件:
git add xxxx.js
git add .
;查看状态:
git status
忽略文件,特别是依赖包和一些工具测试文件:创建.gitignore文件
- .gitignore 的格式规范如下:
- 所有空行或者以 # 开头的行都会被 Git 忽略。
- 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。
- 匹配模式可以以(/)开头防止递归。
- 匹配模式可以以(/)结尾指定目录。
- 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。
1
2
3
4
5
6
7
8
9
10
11
12//忽略所有的 .a 文件
*.a
//但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a
//只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
/TODO
//忽略任何目录下名为 build 的文件夹
build/
//忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt
//忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf查看已暂存和未暂存的修改
git diff
git diff --staged
暂存
提交更新:
git commit -m "xxx"
移除文件:
git rm fileName
移动文件:
git mv file_from file_to
查看提交历史
git log
git log -p -2
;最近两次提交按照补丁patch格式显示git log -stat
;进行代码审核,查看变化很有用;
撤销操作
git commit --amend
补充文件,重新提交;1
2
3git commit -m 'initial commit'
git add forgotten_file
git commit --amend- 取消暂存的文件:
git reset HEAD CONTRIBUTING.md
- 撤销对文件的修改(不建议使用;操作很危险):
git checkout -- CONTRIBUTING.md
远程仓库使用
- 查看远程仓库:
git remote
git remote -v
远程仓库使用的git保存的简写与其对应的url- 查看某个远程仓库:
git remote show origin
- 添加远程仓库
git remote add xxx https://
- 从远程仓库中抓取与拉取
git fetch <remote>
需要手动合并git pull
自动合并
- 推送到远程仓库:
git push origin master
- 远程仓库的重命名与移除:
git remote rename xxx yyy
;git remote remove yyy
打标签
- 列出标签:
git tag
参数:-l(-list); - 创建标签:
- 附注标签:
git tag -a v1.4 -m "my version 1.4"
; - 轻量标签:
git tag v1.4-lw
=git tag tagName
; - 后期打标签进行版本控制管理:
git tag -a v1.2 9fceb02
- 附注标签:
- 删除标签:
git push origin --delete <tagName>
git别名
- 通过git config文件设置命令别名
git分支
- 创建分支:
git branch branchName
- 分支切换,注意暂存及时提交:
git checkout branchName
;
分支的创建与合并
- 新建分支包括hotfix修复上线项目bug:
git checkout -b hoxFixBranchName
- 分支合并:
git checkout master
,git merge hoxFixBranchName
,删除不需要的分支:git branch -d hoxFixBranchName
- 冲突合并,根据实际更改情况保留,一般在vscode中比较一下然后手动合并;
分支管理
- 查看分支列表:
git branch
参数-v是查看每个分支最后一次提交
远程分支
- 查看远程分支:
git remote show <remote>
- 推送:
git push origin hotFixBranch
- 跟踪分支:
git checkout --track origin/hotFixBranch
- 删除远程分支:
git push origin --delete hotFixBranch
变基
- 变基:
git rebase master
;你可以使用 rebase 命令将提交到某一分支上的所有修改都移至另一分支上,就好像“重新播放”一样。 - 变基风险:如果提交存在于你的仓库之外,而别人可能基于这些提交进行开发,那么不要执行变基。(简单来讲,未审核代码直接被别人拿来用就有系统性风险);
服务器上的git
在服务器上搭建 Git
- 裸仓库:
git clone --bare my_project my_project.git
;效果相当于:cp -Rf my_project/.git my_project.git
- 把裸仓库放到服务器上:
既然你有了裸仓库的副本,剩下要做的就是把裸仓库放到服务器上并设置你的协议。 假设一个域名为 git.example.com 的服务器已经架设好,并可以通过 SSH 连接, 你想把所有的 Git 仓库放在 /srv/git 目录下。 假设服务器上存在 /srv/git/ 目录,你可以通过以下命令复制你的裸仓库来创建一个新仓库:
scp -r my_project.git user@git.example.com:/srv/git
;此时,其他可通过 SSH 读取此服务器上 /srv/git 目录的用户,可运行以下命令来克隆你的仓库。
git clone user@git.example.com:/srv/git/my_project.git
如果到该项目目录中运行 git init 命令,并加上 –shared 选项, 那么 Git 会自动修改该仓库目录的组权限为可写。 注意,运行此命令的工程中不会摧毁任何提交、引用等内容。
1
2
3ssh user@git.example.com
cd /srv/git/my_project.git
git init --bare --shared
生成SSH公钥
生成 SSH 公钥:
ssh-keygen -o
1
2
3
4
5// 查看ssh
cd ~/.ssh
ls
// 直接查看默认路径下的ssh公钥
cat ~/.ssh/id_rsa.pub
Git小结
git初始化:
git init
git config配置:
1
2git config --global user.name "hzw728@qq.com"
git config --global user.email "hzw728@qq.com"添加到暂存区:
git add .
提交到本地库:
git commit -m "fist commit"
版本穿梭:
- 查看提交情况:
git status
- 查看提交日志:
git log
- 查看操作记录:
git reflog
- head版本回滚:
git reset --hard 919a8bc
- head版本回滚一次:
git reset --hard HEAD^
- 暂存区重新写注释:
git reset --soft HEAD^
,git commit -m "new commit"
- 暂存区版本撤销并且重新生成一次最新记录:
git revert HEAD
- git reset与git revert的区别:
- git reset 回退到指定版本,相当于是隐藏了commit-id之后的记录,并且不会产生新的commit-id的记录,如果要推送到远端服务器,需要强制推送-f,强制推送对其他使用你的分支代码会有影响,慎用。
- git revert 回退到指定版本,但是重新生成一条新的commit-id记录,对其他提交记录没有影响,推送到远端服务器直接push就好了。
- 查看提交情况:
分支管理:
- 创建分支:
git branch branchName
- 切换分支:
git checkout branchName
- 合并分支:
git merge branchName
- 删除分支:
git branch -d branchName
- 创建分支:
远程分支管理:
- 添加远程分支:
git remote add origin https//
- 查看远端分支:
git remote -v
- 推送到远端分支:
git push origin master
- 记录推送默认远端分支:
git push -u origin master
- 删除远程分支:
git push origin --delete hotFixBranch
,或者git push origin :hotFixBranch
- 拉取远端分支:
git pull origin dev
- 添加远程分支:
团队开发:
- 每天第一件事就是拉取git pull更新一下代码
- 下班前提交代码,避免断电导致硬件故障导致本地代码丢失
gitignore