git
参考
License
MIT
Massachusetts Institute of Technology License
我只想安安静静写代码, 你干嘛都与我无关
-
版权申明
- 文档和软件中需保留原始版权信息
-
免责条款
- 原始作者对软件使用引发的任何损害不负责
-
使用
- 随便用
-
修改
- 随便改
-
再分发
- 随意
BSD
Berkeley Software Distribution License
打广告的时候, 别说你是基于我的, 丢脸
-
版权申明
- 文档和软件中需保留原始版权信息
-
免责条款
- 原始作者对软件使用引发的任何损害不负责
-
使用
- 随便用, 但是宣传软件的时候, 不要带上我
-
修改
- 随便改
-
再分发
- 随意
GPL
GNU General Public License
一日GPL, 一生GPL
-
版权申明
- 文档和软件中需保留原始版权信息
-
免责条款
- 原始作者对软件使用引发的任何损害不负责
-
使用
- 随便用
-
修改
- 随便改, 但是改了之后的代码不能闭源
-
再分发
- 依旧遵循 GPL
LGPL
GNU Lesser General Public License
更灵活的GPL
-
允许动态连接闭源库
-
虽然灵活, 但这并不意味着你可以闭源
Apache
-
版权申明
- 文档和软件中需保留原始版权信息
-
免责条款
- 原始作者对软件使用引发的任何损害不负责
-
使用
- 随便用
-
修改
- 随便改
-
再分发
- 修改后的软件, 分发时需要带上原始版权信息
安装
Linux
| Bash | |
|---|---|
1 2 | |
Windows
首次使用
初始化仓库
在需要管理的目录(工作区)下, 执行以下命令:
| Bash | |
|---|---|
1 | |
将目标目录初始化成 git 可以管理的仓库, 会生成一个
.git目录同时, 会创建一个
main分支, 看不见, 但是存在
设置名字和邮箱
| Bash | |
|---|---|
1 2 | |
此操作的目的, 是为了追踪每次操作, 究竟是谁做的, 我们一般将其存储在 config 中, 配置文件有三个级别, 权重从高到底:
-
仓库
local, 此配置文件只对 当前仓库 有效 -
全局
global, 此配置文件对 当前用户 有效 -
系统
system, 此配置文件对 全局 有效
所在位置:
Windows:
-
local:.git/config -
global:C:\Users\username\.gitconfig -
system:C:\Program Files\Git\etc\gitconfig
Linux:
-
local:.git/config -
global:~/.gitconfig -
system:/etc/gitconfig
文件追踪 / 移动到暂存区
| Bash | |
|---|---|
1 | |
或者追踪所有文件:
| Bash | |
|---|---|
1 | |
忽略某些文件
创建一个 .gitignore 文件, 写入需要忽略的文件或目录:
| Text Only | |
|---|---|
1 2 3 4 | |
值得一提, 忽略文件的权限更改
| Bash | |
|---|---|
1 | |
将暂存区提交到本地仓库
目标文件提交到本地仓库的当前分支:
| Bash | |
|---|---|
1 | |
将本地仓库推送到远程仓库
将本地仓库推送到远程仓库, 需要使用 SSH key 进行身份验证;私钥存储在本地, 公钥存储在远程仓库;当你推送的时候, 远程仓库会验证你的身份, 如果验证通过, 则可以推送
-
生成
SSH key -
Windows:
C:\Users\username\.ssh\id_rsa.pubLinux:
~/.ssh/id_rsa.pub登录远程仓库,
setting->SSH keys->New SSH keytitle:填写公钥的名字key:填写公钥的内容 -
在远程仓库中新建仓库
-
添加远程仓库
Bash 1git remote add origin 远程仓库地址origin是远程仓库的别名, 可以自定义 -
推送到远程仓库
Bash 1git push origin main如果远程仓库没有
main分支, 则会自动创建一个main分支
如果是通过账号密码进行身份验证
-
记住账号密码
Bash 1git config --local credential.helper store
将远程仓库拉取到本地仓库
-
git fetch origin下载但不合并
-
git merge origin/main合并分支
-
git pull origin下载并合并
-
git clone 远程仓库地址在本地创建一个远程仓库的克隆(副本)
冲突
场景: 当 remote 已经领先于 local 时
-
stash local changes
Bash 1git stash -
pull remote changes
Bash 1git pull如果这里出现冲突, 此时需要具体问题具体分析, 常见情形:
local 文件未 add, 无法 stash 此文件, 但 remote 存在同名文件
-
git add <file> -
git stash -
git pull
-
-
apply local changes
Bash 1git stash apply如果这里出现冲突, 此时需要具体问题具体分析, 常见情形:
local 文件与 remote 文件存在冲突
-
手动修改冲突文件, 解决冲突
-
git add <file>
-
子模块
-
拉取含有子模块的仓库
Bash 1git clone --recursive 远程仓库地址 -
添加子模块
Bash 1git submodule add 远程仓库地址 子模块目录 -
删除子模块
Bash 1git rm 子模块目录 -
查看子模块
Bash 1git submodule -
更新子模块
Bash 1git submodule update
branch
| Bash | |
|---|---|
1 2 3 4 5 | |
1-------------------------
创建分支
| Bash | |
|---|---|
1 | |
设置默认编辑器
| Bash | |
|---|---|
1 | |
查看状态
仓库
| Bash | |
|---|---|
1 | |
-
显示位于哪个 分支
-
显示 暂存区 的信息
-
显示 未跟踪 的文件
设置
| Bash | |
|---|---|
1 | |
--级别可以省略, 会显示最终三个配置文件计算后的配置信息
所有分支
| Bash | |
|---|---|
1 | |
*表示当前分支
远程仓库
| Bash | |
|---|---|
1 | |
- 远程仓库的别名和地址
查看提交历史
| Bash | |
|---|---|
1 | |
显示从最近到最远的提交日志
简化输出:
git log --pretty=oneline
查看命令历史
| Bash | |
|---|---|
1 | |
显示从最近到最远的命令日志
可以看到每一次命令的
commit id
修改
更改名字和邮箱
| Bash | |
|---|---|
1 2 | |
修改上一次提交的信息
| Bash | |
|---|---|
1 | |
如果使用的是
nano编辑器, 按Ctrl + X退出, 然后输入Y保存, 最后按Enter退出
从暂存区移除文件
| Bash | |
|---|---|
1 | |
这个命令本质上是
| Bash | |
|---|---|
1 | |
从暂存区移除文件, 但是不会删除文件
commit_id可以省略, 默认是HEAD意思是将暂存区的文件恢复到
commit_id的状态
撤销本次提交
-
保留工作区的修改
> 撤销本次提交, 但是保留工作区的修改Bash 1git reset --soft HEAD^HEAD^表示上一次提交,HEAD^^表示上上次提交, 以此类推 -
删除工作区的修改
Bash 1git reset --hard HEAD^撤销本次提交, 同时删除工作区的修改
删除远程仓库地址
| Bash | |
|---|---|
1 | |
删除远程仓库的别名为
origin的仓库(地址) 仅仅是删除了别名, 远程仓库并没有被删除
切换分支
-
切换到指定分支
Bash 1git checkout 分支名
国区操作
代理
设置代理
| Text Only | |
|---|---|
1 2 3 4 | |
-
取消代理
Bash 1 2
git config --local --unset http.proxy git config --local --unset https.proxy
同时推送到多个远程仓库
-
再添加一个需要推送的远程仓库
Bash 1git remote set-url --add origin 远程仓库地址 -
推送到远程仓库
Bash 1git push origin
注意, 此方案只适用于多个远程仓库的代码完全一致的情况
因为我们只是给
origin添加了多个URL虽然效果上看起来是推送到了多个仓库, 但是实际上只是推送到了一个仓库