GIT常用用法收藏
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 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