目录
远程仓库使用流程
git 工作原理
工作区 --》暂存区 --》本地库 --》远程库
基本流程
1. 新建远程仓库
-
方法一
网页端(GitHub)新建仓库与分支。 -
方法二
命令行进行本地仓库初始化(将当前目录设置为git仓库)
git init [项目名]
然后进行远程库连接,命令如下:
git remote add [shortname] [url]
shortname为引用的名字,默认为origin;url为远程仓库的SSH地址。
例:
git remote add origin git@github.com:username/demo.git
2. 配置开发者的全局用户信息
git config --global user.name "username"
git config --global user.email "abc@github.com"
以上为git全局的用户名和邮箱,不加–global即配置当前仓库的信息。
3. 连接远程仓储的方式
-
HTTPS方式
-
SSH方式(推荐)
-
区别:使用https url克隆对初学者来说会比较方便,复制https url然后到git Bash里面直接用clone命令克隆到本地就好,但是每次pull和push代码都需要输入账号和密码,这也是https方式的麻烦之处。而使用SSH url克隆却需要在克隆之前先配置和添加好SSH key,配置好后,使用方便。
注意:若使用HTTPS方式,则可直接跳到第7步:将远程库克隆到本地,若使用SSH方式,则需要继续看第4步:设置SSH key。
4. 设置SSH key
- 检查你电脑是否已经有 SSH key
cd ~/.ssh // 跳转到ssh文件夹
ls // 列出文件夹中的文件
若.ssh文件夹不存在,则继续第2步创建SSH密钥;若存在 id_rsa.pub 或 id_dsa.pub 文件,则已存在SSH密钥,可以直接跳到第3步,或到第2步重置SSH密钥。
- 创建密钥
ssh-keygen -t rsa -C "yourEmail"
或者
ssh-keygen -t rsa -C "yourEmail" -f ~/.ssh/[rsafilename]
-t后接密钥类型,默认为rsa,可省略;
-C设置注释文字,比如邮箱。
-f指定密钥文件存储文件名,可省略,省略后会在当前文件夹创建。
[rsafilename]为rsa私钥文件的名称。
- 将SSH公钥粘贴到 GitHub 对应的位置(以下2种)并点击确定。
GitHub最高权限的SSH:
右上角头像 -> Settings -> SSH and GPG keys -> New SSH key;
仓库的SSH:
进入远程仓库 -> Settings -> Deploy keys -> Add deploy key。
5. 设置多个SSH key
- 创建另一个密钥:
方法一:
ssh-keygen -t rsa -C "yourEmail" -f ~/.ssh/test_rsa
方法二
ssh-keygen -t rsa -C "yourEmail"
不要一路回车,让你选择在哪里选择存放SSH key的时候写个名字,比如id_rsa,之后的密码可以回车。
- 创建并修改config文件(配置私钥对应的服务器,可永久保存配置)
> touch ~/.ssh/config
> vim ~/.ssh/config
插入以下信息:
# GitHub
Host github.com
HostName github.com
Preferredauthentications publickey
IdentityFile ~/.ssh/id_rsa
User user
# TestRepository
Host test
HostName github.com
Preferredauthentications publickey
IdentityFile ~/.ssh/test_rsa
User user
变量说明:
- Host:可随意填写,方便自己记忆,是替换HostName的变量,后续在添加remote(远程库)时还需要用到;
- HostName:远程库SSH地址的“git@”与“:”之间的域名(网站的或公司的,如GitHub的HostName为github.com);
- IdentityFile:填写对应的私钥文件及路径;
- User:用户名,可有可无,起标识作用。
配置完成后,在连接非默认帐号的github仓库时,远程库SSH地址要对应地做一些修改,把HostName替换为Host。例如:
//默认
> git remote add origin git@github.com:user
> git clone git@github.com:user
//链接非默认账号,使用上面配置的host的值为test
> git remote add origin git@test:user
> git clone git@test:user
6 检测是否成功配置SSH key
//默认ssh key
> ssh -T git@github.com
//检测非默认ssh key
> ssh -T git@[Host]
7 将远程仓库clone到本地
git clone [url]
8 配置开发者的仓库用户信息
git config user.name "username"
git config user.email "abc@github.com"
以上为配置git仓库的用户名和邮箱,在与远程仓库交互时,会覆盖已配置的全局用户信息。若已经配置了全局的用户信息,也可不必配置仓库的用户信息,默认会调用全局用户信息。
9 更新本地仓库
方式一(推荐):
- 从远程仓库拉取
git fetch [shortname远程仓库] 分支名
- 合并到当前分支
git rebase [shortname远程分支]/分支名
方式二:
- 拉取
git pull
//git merge
10 删除远程仓库
- 删除远程仓库
git remote rm [别名]
11 查看分支
git branch // -a 查询所有
12 切换分支
- 本地切换
git checkout [branchname]
- 创建并切换分支
git checkout -b [branchname]
- 切换到远程仓库已有的分支
git checkout -b [branchname] [远程仓库shortname]/分支名
13 创建分支
- 基于当前分支创建
git branch [branchname]
//创建并切换分支
git checkout -b [branchname]
- 基于tag创建
git branch [新分支] tag名
- 远程仓库创建
可视化界面操作
14 删除分支
- 删除本地分支
git branch -d [branchname]
//强制删除
git branch -D [branchname]
- 删除远程分支
git push origin(远程仓库) --delete [分支名]
15 修改分支
15.1 显示文件改动
- 查看文件修改列表
git status -s
- 查看详情
尚未缓存的改动:git diff
查看已缓存的改动: git diff --cached
查看已缓存的与未缓存的所有改动:git diff HEAD
显示摘要而非整个 diff:git diff --stat
15.2 上传代码
- 查看文件修改情况
git status -s
- 将文件添加到缓存
git add .
或者
git add [file1] [file2]
注意:被add的文件便可被git管理,没有被add的文件不会被git管理。
- 提交到本地仓库
git commit -m "message"
- 推送到远程仓库
先更新 > 后提交
git fetch origin 分支名
git rebase origin/分支名
git push origin/分支名
15.2.1 提交冲突
- 查看冲突文件
git status -s
- 手动修改冲突代码
- 提交
git add .
git push [repo名]
15.3 撤销修改
(1) 场景1:
当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时使用该命令:
git checkout -- [file]。
(2) 场景2:
当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改。分两步:
git reset HEAD [file]
// 就回到了场景1,第二步按场景1操作。
(3) 场景3:
已经提交了不合适的修改到版本库时,想要撤销本次提交,参考下一步骤,版本回退,不过前提是没有推送到远程库。
15.4 版本回退
git reset --hard commit_id
查看提交log
git log
要重返未来,需要查看命令历史,以便确定要回到未来的哪个版本。
查看命令历史:
git reflog
15.5 缓存
将单个或多个文件上传到缓存
git add [filename] [filename2]
丢弃工作区的修改
git checkout -- [filename]
取消缓存已缓存的内容
git reset HEAD [filename]
将文件从缓存区中移除
git rm [filename]
默认情况下,git rm file 会将文件从缓存区和你的硬盘中(工作目录)删除。 如果要在工作目录中留着该文件,可以使用命令:
git rm --cached
15.6 合并分支
- 方法一:
网页上新建分支请求(pr)、接受合并请求。 - 方法二:
demo:合并到主分支:- 方式1:
//切换到主分支
> git checkout master
//更新主分支
> git pull
//合并分支
> git merge [分支名dev]
//提交到主分支
> git push origin master
- 方式2:
> git checkout master
//更新主分支
> git fetch origin master
> git rebase origin/master
//合并分支
> git rebase [分支名dev]
//提交到主分支
> git push origin master
15.6.1 合并冲突
当同时修改同一文件时,会出现冲突,需手动合并,打开冲突文件,显示格式如下:
<<<<<<< HEAD
123 789
456 123
789 456
=======
123 123
456 456
789 789
>>>>>>> [branchname]
HEAD指当前所在分支,branchname指要合并的分支名。
“=======”之前为当前所在分支内容,之后为要合并的分支内容。
手动合并(即修改)结束后,要重新上传代码:
- 方式1(使用merge合并):
提交到缓存:git add .
提交到本地库:git commit -m “message”
推送到远程库:git push
合并冲突结束。
- 方式二(使用rebase进行合并)
提交到缓存:git add .
继续进行rebase:git rebase --continue
提交到本地仓库:git commit -m 'message'
推送到远程库:git push
15.7 修改commit
git rebase
//合并最近四条commit
git rebase -i HEAD~4
//自定义合并
git rebase -i commit_id
注意:
1. git rebase -i commit_id只包括此commit_id之后的提交,
并且可以在编辑页面,随意改变commit的位置
git rebase -i commit_id 的编辑页面如下:
15.8 拆分commit
git rebase -i commit_id
在需要拆分的commit上的首个单词pick,换成edit即可。
保存退出后,这时候的HEAD指针指向了此处的commit。
回退一个快照,HEAD^详细介绍
git reset HEAD^
查看项目文件状态
git status (-s)
选择需要的文件合成一个commit
git add [file1] [file2]
git commit -m '注释'
现在仍处于Rebase状态,所以要让它继续运行完毕。
git rebase --continue
16 提交日志
查看提交历史
git log
查看未来的提交历史
git reflog
17 tag标签
18 HEAD^ 与 HEAD~ 的区别
详情咨询CSDN博客地址:sayok_why