美文网首页技术初心
GIT常用用法收藏

GIT常用用法收藏

作者: triplestudio | 来源:发表于2021-08-13 21:02 被阅读0次

    Git 是一个开源的分布式版本控制系统,可以有效、高速地进行项目版本管理。

    分布式意味着不需要服务器软件支持,也可自成体系。如上图所示,本地仓库自成系统。在一个目录下执行 git init,会产生一个 .git 的隐藏文件夹,就开启了该目录结构下文件的版本管理,从而可以为文件形成历史版本,并进行查看、撤回、比较等。

    1、配置信息

    任何时候,使用以下命令可以查看配置信息,从而知道当前所于一个怎样的环境参数之中。

    git config --list
    

    每一个版本的形成,都会记录作者是谁,作者信息通过以下方式配置。

    git config --global user.name "username" 
    git config --global user.email "email" 
    

    使用 git log 可以看到每次提交的作者,显示形式如下。

    Author: username <email>
    Date:   Sat Jul 31 07:56:50 2021 +0000
    

    2、访问账户

    访问远程项目需要权限时,有两种授权方式,SSH 和 HTTP/HTTPS。

    2.1 SSH

    项目路径的形式为 git@xxx.domain.com:hello.git
    授权方式为在本地生成SSH密钥对再把公钥上传到服务器,配置一次,相关有权操作即可自由进行了。
    通过以下命令可以产生密钥对。

    ssh-keygen -t rsa 
    

    根据提示执行,默认会在生成公钥 /c/Users/Administrator/.ssh/id_rsa.pub,将公钥发给管理员,在服务器上添加即可。

    在 Windows 如果发现公钥上传的无效,有可能是服务器之前已经连接过,并已保存连接记录在 /c/Users/Administrator/.ssh/know_hosts 中,该服务器对应的行从中删除即可。

    2.2 HTTP/HTTPS

    项目路径的形式为 https://xxx.domain.com/hello.git
    对于需要授权的操作,通常每次都要求输入用户名和密码。通过以下命令可以保存登录信息从而只需要输入一次。

    git config --global credential.helper store
    

    如果又想要每次操作都输入用户名密码,则可执行以下命令实现。

    git config --global credential.helper wincred
    git credential-manager uninstall
    

    3、远程项目

    3.1 将本地新项目上传

    当然,首先你需要有远程项目的权限,假设服务器上已经创建了一个空项目 https://xxx.domain.com/hello.git,则在本地项目的目录中执行以下命令即可完成初次的上传至远程仓库。

    git init
    git add .
    git commit -m "first commit"
    git remote add origin https://xxx.domain.com/hello.git
    git push -u origin master
    

    3.2 加载远程项目到本地

    使用 git clone 即可,会在当前目录创建一个项目的子目录。如下以命令全创建一个 helloworld 的子目录即为项目所在目录。

    git clone https://hub.fastgit.org/triplestudio/helloworld.git
    

    4、修改比较与恢复

    通常没有其它插曲的修改过程如下。

    // 加入暂存区
    git add .
    // 提交至仓库区
    git commit -m "描述一下本次修改"
    // 推送至远程服务器
    git push
    

    4.1 关于版本

    每次 git commit 会形成一个版本标识,通过 git reflog 可以倒序的看到历次的相关标识,长度为 7 个字符。当然,使用 git log 也可以看到,只是太长了,使用其前 7 位的短标识即可。


    4.2 比较修改

    // 查看修改了哪些文件
    git status 
    // 所有修改比较
    git diff 
    // 具体到某个文件
    git diff README.md
    // 如果已经 git add . 了,则带上 --cached 来查看
    git diff --cached README.md
    // 如果已经 git commint 了,则需要指定比较的
    git diff b8576cf aafab27 README.md
    

    4.3 恢复文件

    先来看看一些命令的撤销
    撤销 git add . 命令
    git reset HEAD
    撤销 git commit 命令
    git reset HEAD^

    当文件改乱了,可以使用以下命令恢复为改之前的样子。
    git checkout -- README.md

    如果已经 git add 了,可以撤销命令再恢复,也可以使用以下命令。
    git reset --hard

    如果已经 git commit 了,可以撤销命令再恢复,也可以使用以下命令。
    git reset --hard b8576cf


    5、分支

    从当前分支形成一个新的分支

    最好所有修改已是提交状态,否则工作区中的修改被带到新分支容易失控。

    // 创建 branch2 分支
    git branch branch2
    // 切换到 branch2 分支
    git checkout branch2
    创建并切换分支: $ git checkout -b branch2
    

    从远程获取新的分支

    取远程分支并分化一个新分支
    git checkout -b otherbranch origin/otherbranch

    挂起当前分支的修改

    如果正在修改某个分支,却需要切换到另一个分支去修改bug,则切换之前,先藏好当前修改,待重回本分支时再恢复。
    // 藏(修改藏起来,工作区变成修改前的状态)
    git stash
    // 恢复
    git stash pop

    git merge mybranch
    删除分支: git branch -d mybranch 强制删除分支: git branch -D mybranch

    冲突
    一种情况是基于同一版本各自修改提交,合并时就会产生冲突。


    git mergetool


    其中上左区为修改前,上中区为本地(local)版本库修改,C区为远程版本库(remote)信息。

    修改之后,再次提交即可。

    实际上,如果没有自动合并,就是找到冲突的文件去进行手动修改再重新提交一次。

    6、其它
    访问 https://github.com/ 比较慢的时候,可以使用一些镜像,如 https://hub.fastgit.org/

    附:常用命令:
    git config --global user.name "你的名字" 让你全部的Git仓库绑定你的名字

    git config --global user.email "你的邮箱" 让你全部的Git仓库绑定你的邮箱

    git init 初始化你的仓库

    git add . 把工作区的文件全部提交到暂存区

    git add ./<file>/ 把工作区的<file>文件提交到暂存区

    git commit -m "xxx" 把暂存区的所有文件提交到仓库区,暂存区空空荡荡

    git remote add origin https://github.com/name/name_cangku.git 把本地仓库与远程仓库连接起来

    git push -u origin master 把仓库区的主分支master提交到远程仓库里

    git push -u origin <其他分支> 把其他分支提交到远程仓库

    git status查看当前仓库的状态

    git diff 查看文件修改的具体内容

    git log 显示从最近到最远的提交历史

    git clone + 仓库地址下载克隆文件

    git reset --hard + 版本号 回溯版本,版本号在commit的时候与master跟随在一起

    git reflog 显示命令历史

    git checkout -- <file> 撤销命令,用版本库里的文件替换掉工作区的文件。我觉得就像是Git世界的ctrl + z

    git rm 删除版本库的文件

    git branch 查看当前所有分支

    git branch <分支名字> 创建分支

    git checkout <分支名字> 切换到分支

    git merge <分支名字> 合并分支

    git branch -d <分支名字> 删除分支,有可能会删除失败,因为Git会保护没有被合并的分支

    git branch -D + <分支名字> 强行删除,丢弃没被合并的分支

    git log --graph 查看分支合并图

    git merge --no-ff <分支名字> 合并分支的时候禁用Fast forward模式,因为这个模式会丢失分支历史信息

    git stash 当有其他任务插进来时,把当前工作现场“存储”起来,以后恢复后继续工作

    git stash list 查看你刚刚“存放”起来的工作去哪里了

    git stash apply 恢复却不删除stash内容

    git stash drop 删除stash内容

    git stash pop 恢复的同时把stash内容也删了

    git remote 查看远程库的信息,会显示origin,远程仓库默认名称为origin

    git remote -v 显示更详细的信息

    git pull 把最新的提交从远程仓库中抓取下来,在本地合并,和git push相反

    git rebase 把分叉的提交历史“整理”成一条直线,看上去更直观

    git tag 查看所有标签,可以知道历史版本的tag

    git tag <name> 打标签,默认为HEAD。比如git tag v1.0

    git tag <tagName> <版本号> 把版本号打上标签,版本号就是commit时,跟在旁边的一串字母数字

    git show <tagName> 查看标签信息

    git tag -a <tagName> -m "<说明>" 创建带说明的标签。-a指定标签名,-m指定说明文字

    git tag -d <tagName> 删除标签

    git push origin <tagname> 推送某个标签到远程

    git push origin --tags 一次性推送全部尚未推送到远程的本地标签

    git push origin :refs/tags/<tagname> 删除远程标签<tagname>

    git config --global color.ui true 让Git显示颜色,会让命令输出看起来更醒目

    git add -f <file> 强制提交已忽略的的文件

    git check-ignore -v <file> 检查为什么Git会忽略该文件

    git branch other

    相关文章

      网友评论

        本文标题:GIT常用用法收藏

        本文链接:https://www.haomeiwen.com/subject/dtbfvltx.html