Git&GitHub学习

---- Git本地仓库和命令 ----

本地库初始化

选择一个目录,使用命令创建一个目录,使用git init 命令将目录变成一个仓库,当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。 
mkdir 创建目录

pwd  显示当前目录

 

 

配置用户(设置签名)

形式:

用户名: abc

Email地址: abcde@qq.com

作用:

区分不同开发人员的身份

辨析:

这里设置的签名和登录远程仓库(代码托管中心)的用户名密码没有任何关系

命令:

1.项目级别/仓库级别:

当前本地库范围内有效

git config user.name xxx

git config user.email xxx@xxx.com

签名信息保存位置:当前仓库位置/.git/config文件

 

 cat  打印、合并文件

 

2.系统用户级别:

登录当前操作系统的用户范围内有效

git config --global user.name xxx

git config --global user.email xxx@xxx.com

签名信息保存位置:~/.gitconfig文件(cat ~/.gitconfig)

 

 

3.优先级:

项目级别优先于用户系统级别,二者都有时使用项目级别;

如果只有系统用户级别的签名,就采用系统用户级别;

如果二者都没有则不允许;

 

添加文件

首先新建一个文件read.txt

(1)使用命令git addread.txt添加到仓库:

(2)使用命令git commitread.txt提交到仓库:

 

 

 其中,-m后面是本次提交的说明,1 file changed表示有一个文件发生改动,2 insertions表示插入了两行内容。

如果我们不小心直接使用了git commit操作,而不是git commit -m "XXX"操作的话,会弹出这样一个窗口提示我们输入为什么要合入本次修改

 

修改文件

首先,将我们的read.txt文件修改一下,使用git status查看当前仓库的修改状态,其中,modified: readme.txt告诉我们,readme.txt被修改了。

如果我们要看具体修改的是什么内容,使用git diff命令来查看

其中,可以看出readme.txt被修改了,修改内容是 + 修改修改修改 。

知道了修改内容,认为没有问题就可以将它提交到仓库里面了,也是同样的步骤git add <file>git commit -m "xxx"

 

 

 

版本穿梭

看到历史提交的数据命令:

git log     空格向下翻页,b向上翻页,q退出

git log --pretty=oneline

git log --oneline

git reflog    HEAD@{移动到当前版本需要多少步}

 

 

 

前进后退:

①基于索引值[推荐]

git reset --hard 索引值

 

 

 

②使用^符号:只能后退

git reset --hard HEAD^

一个^表示后退一步,n个表示后退n步

③使用~符号:只能后退

git reset --hard HEAD~n

表示后退n步

 

撤销修改场景

假如read.txt原内容为A,修改后为A+B:

①此时没有执行git add操作,工作区想要恢复为A,则执行:

 

 

 执行前,工作区内容为A+B,暂存区内容为A,版本库内容为A。 
执行后,工作区内容变为A,暂存区内容为A,版本库内容为A。

②此时执行了git add操作,想要撤回本次git add操作(工作区恢复为A+B,暂存区恢复为A)则执行:

 等同于

 

 --mixed表示重置HEAD指针和暂存区,但是工作区内容保持不变。

执行前,工作区内容为A+B,暂存区内容为A+B,版本库内容为A。 
执行后,工作区内容为A+B,暂存区内容为A,版本库内容为A。

③此时执行了git add操作,想要撤回本次git add操作(工作区恢复为A,暂存区恢复为A),则执行:

 

 执行前,工作区内容为A+B,暂存区内容为A+B,版本库内容为A。 
执行后,工作区内容为A,暂存区内容为A,版本库内容为A。

④此时执行了git add操作和git commit操作,想要撤回本次操作(工作区恢复为A+B,暂存区恢复为A+B,版本库恢复为A),则执行:

--soft表示仅仅重置HEAD指针,不重置工作区和暂存区的内容。

执行前,工作区内容为A+B,暂存区内容为A+B,版本库内容为A+B。 
执行后,工作区内容为A+B,暂存区内容为A+B,版本库内容为A。

⑤此时执行git add操作和git commit操作,想要撤回本次操作(工作区恢复为A,暂存区恢复为A,版本库恢复为A),则执行:

 

 执行前,工作区内容为A+B,暂存区内容为A+B,版本库内容为A+B。 
执行后,工作区内容为A,暂存区内容为A,版本库内容为A。

mixed,soft,hard 比较:

    • --mixed:重置HEAD指针和暂存区,工作区保持不变。 
      说明:--mixed后面可以接文件名或者指定的指针比如HEAD^,接文件名时表示仅仅重置当前的暂存区(暂存区的内容还是HEAD的),接指针比如HEAD^时,表示重置当前的指针到HEAD^,暂存区内容变为HEAD时的内容(也就是空的)。

    • --soft:后面只能接指针,仅仅重置版本(比如将当前版本HEAD改为HEAD^,但是暂存区和工作区的内容还是HEAD的)。

    • --hard:后面只能接指针,重置版本、暂存区和工作区内容(比如将当前版本HEAD改为HEAD^,暂存区和工作区的内容都变成HEAD^的)。

 

git 删除远程仓库的某次提交

①撤销中间某次提交

git revert commitId 

②撤销 '到' 某次提交并暂存

git reset commitId (注:不要带–hard)到上个版本

git stash 暂存修改

git push --force 强制push,远程的最新的一次commit被删除

git stash pop 释放暂存的修改,开始修改代码

git add . -> git commit -m "massage" -> git push

 

git 只提交部分修改的文件(提交指定文件)

在我们的项目中,经常会在本地编译一些代码,还未写完,测试那边来告诉你要改改某个文件的bug,非常着急,此时改完了,提交的时候,自己还在编译的代码并不想提交,此时,你可以利用git这些指令帮助你!

1 git status -s 查看仓库状态

2 git add src/components/文件名 添加需要提交的文件名(加路径--参考git status 打印出来的文件路径)

3 git stash -u -k 忽略其他文件,把现修改的隐藏起来,这样提交的时候就不会提交未被add的文件

4 git commit -m "哪里做了修改可写入..."

5 git pull 拉取合并

6 git push 推送到远程仓库

7 git stash pop 恢复之前忽略的文件(非常重要的一步)

 

git 从某次commit处切新分支

1 git log 查看提交

2 // 通过checkout 跟上commitId 即可创建制定commit之前的本地分支
git checkout commitId -b 本地新branchName

3 git push 推送到远程仓库

 

git出现Your branch and ‘origin/master‘ have diverged解决方法

如果不需要保留本地的修改,只要执行下面两步:
git fetch origin
git reset --hard origin/master

当我们在本地提交到远程仓库的时候,如果遇到上述问题,我们可以首先使用如下命令:
git rebase origin/master

然后使用
git pull --rebase

最后使用
git push origin master
把内容提交到远程仓库上。

 

git强制覆盖本地分支

git强制覆盖:
    git fetch --all
    git reset --hard origin/master
    git pull

git强制覆盖本地命令(单条执行):
    git fetch --all && git reset --hard origin/master && git pull

 

.gitignore文件不生效

# 清除缓存文件

git rm -r --cached .

git add .

git commit -m ".gitignore重写缓存成功"

git push

 

删除文件

①rm read.txt

②现在你有两个选择,

一是确实要从版本库中删除该文件 :

git add read.txt

git commit -m "xxx"


二是删错了,还原

git checkout -- read.txt

 

---- Git远程仓库 ----

添加远程库

①注册github账号并登录

②在右上角找到“new repository”按钮,创建一个新的仓库:

 

 在Repository name填入你起的名字,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库

创建成功后跳到了这个页面:

 

 这个地址就是我们远程仓库地址

③将创建的远程库与本地库进行关联:

然后我们在本地的test仓库下打开git bash,运行命令:

 

 远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库

 

 

 

关联完成后,运行git remote - v命令,可以看到有两个地址,fetch地址用来取回,push地址用来推送

④将文件推送到远程仓库,运行命令git push origin master,origin后面跟的分支,因为我们目前没有创建分支,所以用的master

 

 然后弹出github账户登录页面:

 

 验证后:

 

推送完成,然后在github中就可以看到我们推送的内容了

 

 

 远程克隆

如果我们已经有了一个远程库,如何将它拉取到本地呢?

git clone [远程地址],首先复制要克隆项目的远程地址

 

然后执行命令:

 

 成功后,会发现项目已经克隆到本地

克隆的效果:

  完整的把远程库下载到本地

  创建origin远程地址别名

  初始化本地库

 

远程库拉取

本地存在clone下来的文件 就用pull更新

pull = fetch + merge

 git fetch 别名  分支名

 git merge 别名  分支名

git pull 别名 分支名 

 

 解决冲突

要点:

1,如果不是基于远程库最新版做的修改不能推送,必须先拉取pull

2,拉取下来如果进入冲突状态,则按照“分支冲突解决” 解决即可

 

跨团队协作

①点击别人仓库的fork 到自己的仓库

 

 

 

 

② 然后clone下来 修改后推送到远程库 

③  点击Pull Request请求

④ Create pull request发消息

 

SSH 免密登录

以上示例我们在clone 和 push的时候都用的 https类型的地址,其实还有一种SSH类型的地址,使用SSH类型的地址推送的时候,就不会让我们输入账号密码了

 

 

 步骤:

①cd ~ 进入家目录   输入:ssh-keygen -t rsa -C GitHub邮箱地址  然后一路回车

 

 

 

②进入.ssh目录,复制id_rsa.pub文件内容

 

 

③登录GitHub  Settings --> SSH and GPG keys --> New SSH Key

 

 

④回到git通过ssh地址创建  git remote add 别名 SSH地址

 

 

---- Git分支管理----

如果在多人协作的项目中,我们有一个新的功能要去实现,当前我们已经实现了50%,如果此时我们将代码合入master分支,就有可能影响其他人无法工作,如果我们不合入master分支,则会有代码丢失的风险。 
那么,针对这种情况,我们就可以新建一个只有自己能看见的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作

创建分支

git branch 分支名

查看分支

git branch
git branch -v

切换分支

git checkout 分支名
git checkout -b 分支名   #创建分支并直接切换到该分支

合并分支

例如:b分支已修改完毕,申请合并到a分支上

第一步  切换到接受新内容的分支a

  git  checkout  a

第二步  执行merge命令

 git merge b

 删除分支

git branch -d 分支名

---- Git工作流----

在项目开发过程中使用Git的方式

分类:

①集中式工作流

像SVN一样,集中式工作流有一个中央仓库,所有的修改都提交到了Master分支上

②GitFlow工作流 *

主干分支master 开发分支develop 修复分支hotfix 预发布分支release 功能分支feature

GitFlow 有独立的分支,让发布迭代过程更流畅。

③Forking 工作流

在 GitFlow 基础上, 充分利用了 Git 的 Fork 和 pull request 的功能以达到代码审核的目的。 安全可靠地管理大团队的开发者


---- Git补充功能----

设置命令颜色

给Git设置命令颜色,使我们的命令输出更醒目:

git config --global color.ui true

设置忽略文件

比如有些文件需要放在Git仓库目录下,但是又不需要提交到Git的,可以新建一个名称为.gitignore的文件,然后把你不想要被提交的文件添加进去。很多开发语言的忽略文件都已经写好了忽略文件,我们只需要再往里面添加自己想要添加的就可以了。

 

 

设置别名

比如我觉得输入git status太麻烦,想简化成git st行吗?当然可以,给git status配置别名:

git config --global alias.st status

 

标签

当我们需要一个指定的版本的时候,通常需要这个版本的commit id,但是commit id我们一般记不住,则我们可以使用git tag给某个版本打上一个标签。commit id和tag的关系类似于网站的IP地址和域名的关系

打标签

git tag v1.0

默认标签是打在最新提交的commit上的。有时候,如果忘了打标签,比如,现在已经是周五了,但应该在周一打的标签没有打,怎么办?

给历史版本打上标签,先找到commit id,再打标签

git tag 标签名 commit id

 

 

查看标签:git tag

 

 

查看具体标签对应的版本提交信息:git show v1.0

 

 

删除标签:git tag -d v1.1

 

 

推送标签到远程仓库:git push origin v1.0

删除远程标签: 
需要先删除本地标签,再用命令git push origin :refs/tags/<tag-name>删除远程标签:

 

 

以上文档已上传至github:https://github.com/cuijl123/Git-Github




posted @ 2020-10-14 16:06  北巷听雨  阅读(124)  评论(0编辑  收藏  举报
返回顶端