git 使用详解

远程仓库使用流程

git 工作原理

工作区 --》暂存区 --》本地库 --》远程库

基本流程

1. 新建远程仓库

  • 方法一
    网页端(GitHub)新建仓库与分支。

  • 方法二
    命令行进行本地仓库初始化(将当前目录设置为git仓库)

git init [项目名]

然后进行远程库连接,命令如下:

git remote add [shortname] [url]

shortname为引用的名字,默认为originurl为远程仓库的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

变量说明:

  1. Host:可随意填写,方便自己记忆,是替换HostName的变量,后续在添加remote(远程库)时还需要用到;
  2. HostName:远程库SSH地址的“git@”与“:”之间的域名(网站的或公司的,如GitHub的HostName为github.com);
  3. IdentityFile:填写对应的私钥文件及路径;
  4. 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 的编辑页面如下:
git rebase -i commit_id

15.8 拆分commit
git rebase -i commit_id

在需要拆分的commit上的首个单词pick,换成edit即可。拆分commit
保存退出后,这时候的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标签

tag

18 HEAD^ 与 HEAD~ 的区别

详情咨询CSDN博客地址:sayok_why

参考文献

CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值