git利用

杀鸡焉用牛刀  金牌会员 | 2024-6-25 03:11:15 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 838|帖子 838|积分 2514

git利用 – 潘登同砚的git利用条记


  
git是目前最盛行的版本控制体系。


  • 版本控制体系:纪录文件或代码的变化,以便于追踪、回滚、比较等。
  • 分布式:每个开发者都可以有完备的版本库,可以方便地进行协作。
Git的安装与配置


  • 安装Git
下载Git安装包,并安装。git官网:https://git-scm.com/downloads 一起next即可。
检察是否安装乐成:在下令行中输入git,假如出现git的资助信息,则阐明安装乐成。
  1. git --version
复制代码

  • 配置Git
当安装完成后,必要进行一些配置,以便利用Git。因为每次提交代码时,Git都必要纪录提交者的姓名和邮箱,所以必要进行配置。
  1. git config --global user.name "your name"
  2. git config --global user.email "your email"
复制代码
--global参数表现全局配置,也就是对当前用户起作用。
配置完后,可以利用git config --list下令检察当前的配置信息。大概在.gitconfig文件中检察。
Git根本下令

Git初始化当地堆栈

cd到你要创建堆栈的目录,然后执行:
  1. git init
复制代码
这将创建一个名为.git的目录,这个目录是Git用来存放版本库的。
Git工作区、暂存区、版本库



  • 工作区:就是你在电脑里能看到的目录,好比D:\project\test。
  • 暂存区:英文叫stage或index,它是Git的暂存区域,暂时生存你对文件所做的改动。
  • 版本库:工作区有一个隐蔽目录.git,这个目录是Git的版本库,用来生存所有版本的历史纪录,包罗提交过的版本和暂存的改动。

Git跟踪文件

起首确定工作区中有文件
  1. git status
复制代码
假如没有文件,则执行:
  1. git add 文件名
复制代码
跟踪文件后,Git会把文件暂存到暂存区,从而git可以跟工作区、当地堆栈之间进行交互。


  • untracked files表现工作区中有文件没有被跟踪。
  • to be committed表现暂存区中有文件等待提交。
git提交文件
  1. git commit -m "提交说明"
复制代码
提交后,执行git status
下令,可以看到nothing to commit, working tree clean表现暂存区已经清空,工作区没有未提交的改动。
Git修改文件


  • 修改文件
修改文件后,必要先跟踪文件:
  1. git add .
复制代码

  • 提交修改
  1. git commit -m "提交说明"
复制代码
检察提交历史:
  1. git log
  2. # 可以加上--oneline参数,查看简短的提交历史
  3. git log --oneline
复制代码
Git删除文件

删除文件有两种方式,第一种是直接删除文件,然后要参加缓存区再提交
  1. rm 文件名git add .
  2. git commit -m "删除文件"
复制代码
第二种是利用git直接提交删除操作(减少了一步)
  1. git rm 文件名
  2. git commit -m "删除文件"
复制代码
git撤销操作

之前生存了,然后做了修改操作,发现修改不满足,想撤销到上一个版本,可以利用git restore下令。
  1. # 将文件从暂存区恢复到工作区,用于丢弃本地修改。
  2. git restoe 文件名
复制代码
git取消暂存

假如做了修改操作并已经将文件暂存到暂存区,但是又不想提交,想规复到上一个暂存区版本,可以利用git restore --staged大概git reset -- file下令。
  1. git restore --staged .  # 用于恢复所有暂存区文件
  2. git reset -- .  # 用于恢复所有暂存区文件 (二选一即可)
  3. git restore .  # 用于恢复所有文件(恢复到工作区)
复制代码
git跳过暂存区


为了简化提交操作,可以利用git commit -a下令,这将自动把所有已经跟踪过的文件暂存起来一并提交,跳过了git add下令。
  1. git commit -a -m "提交说明"
复制代码
提示: 利用-a跳过git add步骤的前提是这些待提交的文件必须已经被跟踪过,-a不会自动将未跟踪的文件变为跟踪文件。
为了简化撤销操作,可以利用git checkout HEAD .下令,这将把暂存区的文件撤销掉,回到工作区。
  1. git checkout HEAD -- 文件名
  2. git checkout HEAD .  # 用于撤销所有文件(回到工作区)
复制代码
git版本回退


  1. # 回退到上一个版本
  2. git reset --hard HEAD^
  3. # 回退到指定版本
  4. git reset --hard 版本号
复制代码
HEAD表现当前版本,HEAD^表现上一个版本,HEAD^^表现上上一个版本,依次类推。
也可以用数字指定回退版本,好比git reset --hard HEAD~10表现回退到前10个版本。
可以用git reflog下令检察下令历史,以便确定要回退到哪个版本。 版本号只必要前4位即可。
版本回退会使得暂存区和工作区的文件都回到上一个版本,提交纪录也会被删除。
git撤销提交

假如是想回到上一个版本,但是又不想删除提交纪录,可以利用git revert下令。
git revert下令会在版本库中创建一个新的提交,撤销之前的提交,保存提交阐明。
相当于在版本库中创建了一个新的提交,(就好像)回到了之前的版本。
  1. git revert HEAD  # 撤销最后一次提交
  2. git revert 版本号  # 撤销指定版本的提交
复制代码
Git常用下令

git忽略文件

有些文件不必要纳入版本管理,好比日志文件、缓存文件等。可以创建一个.gitignore文件,列出要忽略的文件。
格式规范


  • 所有空行大概以#开头的行都会被忽略。
  • 可以利用尺度的glob模式匹配。
  • 匹配模式最后跟反斜杠(/)阐明要忽略的是目录。
  • 要忽略指定模式以外的文件或目录,可以在模式前加上感叹号(!)。
glob模式匹配规则:


  • *匹配恣意字符串,?匹配单个字符,[abc]匹配a、b、c中的恣意一个字符。
  • **匹配多级目录。
  • {}匹配括号内的恣意模式。
  1. # 忽略所有.log文件
  2. *.log
  3. # 忽略所有logs文件和目录,包括多级路径下的logs目录,logs目录下的文件也会被忽略
  4. logs/
  5. # 忽略当前目录下的 logs 目录
  6. /logs
  7. # 忽略 a/foo a/b/foo /foo等 目录下的文件
  8. **/foo
复制代码
git比较文件差异


  1. # 比较工作区和暂存区的差异
  2. git diff
  3. # 比较暂存区和版本库的差异
  4. git diff --cached
  5. # 比较两个版本之间的差异
  6. git diff 版本号1 版本号2
  7. # 比较工作区和版本库的差异
  8. git diff HEAD
复制代码
git代码托管平台

通常进行多人协作开发时,必要一个代码托管平台,好比GitHub、GitLab等。


  • GitHub:https://github.com/
  • 也可以自己搭建Git服务器,好比GitLab。
git当地添加长途堆栈

  1. # 先在当地初始化堆栈git init
  2. # 添加长途堆栈# git remote add <name> <url>git remote add origin https://github.com/username/repository.git# 检察长途堆栈信息git remote# 删除长途堆栈 只是解除当地与长途堆栈的关联# git remote rm <name>git remote rm origin# 推送当地堆栈内容到长途堆栈# git push <remote> <branch>git push origin master# 拉取长途堆栈内容到当地堆栈# git pull <remote> <branch>git pull origin master
复制代码
git克隆与推送

  1. # 克隆前不要求初始化本地仓库
  2. # 克隆远程仓库到本地 默认名称为 origin
  3. # git clone <url>
  4. git clone https://github.com/username/repository.git
  5. # 推送本地仓库内容到远程仓库
  6. # git push <remote> <branch>
  7. git push origin master
  8. # 后续直接使用 git push 即可 origin master等信息已经记录了
复制代码
git拉取与合并

  1. # 拉取远程仓库内容到本地仓库
  2. # git pull <remote> <branch>
  3. git pull origin master
  4. # 后续使用 git pull 即可
  5. # 使用git pull拉取前确保设置了跟踪信息
  6. # git branch --set-upstream-to=<remote>/<branch> <current_branch>
  7. git branch --set-upstream-to=origin/master master
复制代码
git抓取

git fetch下令用于从长途堆栈获取最新数据,但不会自动合并到当地堆栈。当准备好了自己当地堆栈和长途堆栈的同步,就可以利用git merge下令进行合并。
  1. # 从远程仓库抓取最新数据
  2. # git fetch <remote> <branch>
  3. git fetch origin master
  4. # 后续使用 git fetch 即可
  5. # 合并远程仓库的最新数据到本地仓库
  6. # git merge <remote>/<branch>
  7. git merge origin/master
复制代码
git合并辩论

辩论是指两个或多个分支在同一文件中进行了差别的修改,导致git无法自动合并。
解决方案:


  • 先拉取长途堆栈的最新数据,然后手动合并。在辩论的文件中会有HEAD和分支的差别内容,必要手动解决辩论。(把那些多余的符号也要删掉)
所以要养成习惯,在推送代码前先拉取最新数据,然后手动合并辩论。
git分支

git中的分支,本质上是指向提交对象commit的可变指针。git会利用master分支作为默认分支,其他分支都基于master分支。分支在每次提交的时间都会向前移动。在进行若干次提交后,其实已经有了一个指向最后一次提交对象的分支。



  • 基于当前分支创建新分支 这会在(当前分支指向的commit对象)上新建一个新的分支指针。
  1. # git branch <name>
  2. git branch testing
复制代码

留意:差别分支可以指向同一个commit对象,但不能有相同的提交纪录。
HEAD指针

HEAD指针是一个指向当前工作中的当地分支的指针。假如我们只有一个默认的mater分支,那么HEAD指针指向master分支。

假如有多个分支,切换分支时,HEAD指针会自动移动到目标分支。
  1. # 切换到testing分支
  2. git checkout testing
复制代码
当在testing分支上进行了提交,HEAD指针会自动移动到testing分支指向的提交对象。

为什么要利用分支

一般项目中会有三个分支:master分支、dev分支、feature分支。


  • master分支:主分支,用于发布稳固版本。经过测试的提交都应该合并到master分支。
  • dev分支:开发分支,用于开发新功能。大概仅用于暂时测试,不稳固。
  • feature分支:功能分支,用于开发新功能。从dev分支上拉取,开发完成后合并回dev分支。(名称一般由开发的功能名称加上feature前缀构成)
工作场景:开发职员在某个功能分支正在编写代码,突然接到一个电话说线上有个很严重的问题必要紧急修补,这个时间我们面临的问题:当前的功能代码不能提交到线上,所以不能在当前分支进行bug修复。
解决方案:


  • 起首,返回到原先已经发布到线上的稳固版本master分支。
  • 然后,创建一个新的分支hotfix分支,从master分支上拉取最新代码。
  • 然后,在hotfix分支上进行紧急修复。通过测试后,合并回master分支。
  • 最后,切换回原先的功能分支,继续开发。
git分支管理

创建分支

  1. # 创建新分支前 先保证有提交对象git commit -m "提交说明"
  2. # 此时master分支指向最新提交对象# 创建新分支# git branch <name>
  3. git branch testing
复制代码
检察分支

其中分支前面带*号表现当前分支。
  1. # 查看所有分支
  2. git branch
  3. # 查看所有分支的最后一次提交
  4. git branch -v
复制代码
切换分支

  1. # 切换到testing分支
  2. git checkout testing
复制代码
留意:切换分支,当地工作区的文件会被暂存区的文件覆盖。
新建并切换到新分支:
  1. # 创建并切换到新分支
  2. # git checkout -b <name>
  3. git checkout -b feature/test
复制代码
删除分支

  1. # 删除testing分支
  2. # git branch -d <name>
  3. git branch -d testing
复制代码
合并分支

  1. # 切换到新分支git checkout feature/test# 进行代码编辑,在新分支上提交内容git commit -m "提交说明"
  2. # 切换回master分支git checkout master# 将新分支合并到master分支# git merge <name>git merge feature/test
复制代码


最后删除没用的分支:
  1. # 删除feature/test分支
  2. git branch -d feature/test
复制代码
合并分支辩论

有时间合并操作不会如此顺遂。假如在差别分支中都对同一个文件进行了差别的修改,那么git无法自动合并,会出现合并辩论。
  1. # 切换到master分支
  2. git checkout master
  3. # 合并dev分支
  4. git merge dev
  5. # 出现合并冲突,需要手动解决冲突
  6. # 编辑冲突文件,删除多余的符号
  7. # 解决冲突后,提交
  8. git commit -am "提交说明"
复制代码
git储藏

有的时间,我们在开发过程中,会有一些暂时性的修改,好比测试代码,大概一些小的改动。这些修改并不一定要提交,但是又不想丢失。这时间,我们就可以利用git stash下令进行储藏。
  1. # 储藏当前工作区的修改
  2. git stash
  3. # 切换到别的分支
  4. git checkout master
  5. # 查看储藏列表
  6. git stash list
  7. # 切换回原先的分支
  8. git checkout dev
  9. # 恢复储藏
  10. git stash apply
复制代码
git长途分支

长途分支(remote branch )是对长途堆栈中的分支的索引。它们是一些无法移动的当地分支,长途分支就像是书签,提示着你前次毗连长途堆栈时上面各分支的位置。
我们用 (长途堆栈名)/(分支名) 这样的情势表现长途分支。在当地我们只能移动当地master分支,不能移动长途分支origin/master。


  • 从长途堆栈克隆项目到当地



  • 在当地master分支修改内容,提交后,当地master分支移动,origin/master分支保持不变。



  • 只有跟服务器通信,长途分支origin/master分支才会移动,好比其他人往长途堆栈推送了代码,则长途堆栈中,master分支向前移动,我们可以通过 git fetch 获取长途堆栈库的最新数据。



  • 通过 git merge orgin/master 将长途分支的变更合并到当地master分支。
创建长途堆栈分支

从当地向长途堆栈推送分支


  • 在当地新建分支 feature_user
  • 推送当地分支到长途堆栈
  • 其他人通过 git fetch 获取长途堆栈库的最新数据
  1. # 推送本地分支到远程仓库
  2. # git push <remote> <branch> git push 远程仓库名 本地分支名:远程分支名 远程分支名跟本地分支名相同,可以采用简写
  3. git push origin feature_user
  4. # 其他人通过 git fetch 获取远程仓库库的最新数据
  5. git fetch origin
  6. # 通过远程分支创建本地分支 (先git fetct)
  7. # git checkout -b <name> <remote>/<branch>
  8. git checkout -b feature_user origin/feature_user
复制代码
留意:


  • 通过git checkout -b <name> <remote>/<branch>创建当地分支时,当地分支会自动与长途分支建立追踪关系。
  • 也可以先在当地新建feature_user分支,然后 git fetch 获取最新数据,再通过 git merge origin/feature_user 手动合并到当地分支,但必要手动跟踪长途分支。设置跟踪分支git branch --set-upstream-to=origin/develop develop
也可以直接在GitHub网站上创建长途分支,然后推送当地分支到长途堆栈。
删除长途分支

当我们的某个分支已经合并到master分支,而且不再必要保存时,我们可以删除长途分支。可以直接在GitHub网站上删除长途分支,也可以利用下令行删除。
  1. # 删除远程分支
  2. # git push <remote> --delete <branch>
  3. git push origin --delete feature_user
复制代码
留意:删除长途分支后,会将当地长途分支这个指针跟服务器上面临应的分支删撤除,当地分支不会被删除。
Git其他下令

SSH协议

SSH协议是一种网络协议,用于在两台计算机之间进行安全的长途登录。与https协议差别,https是通过用户名和密码进行认证,而SSH协议是通过密钥进行认证。


  • 什么是SSH协议
SSH协议是一种网络协议,用于在两台计算机之间进行安全的长途登录。它利用公钥加密技术,允许用户在不安全的网络中安全地进行长途登录。利用SSH协议可以有用防止中间人攻击、数据篡改、数据走漏等安全风险。


  • 怎样生成SSH密钥
  1. # 在命令行cmd中输入以下命令,生成SSH密钥
  2. ssh-keygen -t rsa -C "your email"
  3. # 然后回车,会出现一系列提示,按回车键继续。
  4. # 最后会在用户目录下生成.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个文件是SSH密钥。
复制代码
然后把公钥id_rsa.pub的内容复制到GitHub、GitLab等代码托管平台的SSH公钥设置中。
然后复制堆栈的SSH地址,利用SSH协议克隆堆栈:
  1. # 克隆仓库
  2. # git clone <ssh_url>
  3. git clone git@github.com:username/repository.git
复制代码
git标签



  • 什么是标签?
  • 标签可以是一个对象(带注解标签),也可以是一个简单的指针(不带注解标签),用来标注某次提交对象。

    • 假如只是一个简单的指针,则它就相当于一个不会移动的分支。
    • 假如是一个对象,则除了生存指向的提交对象的信息之外,还会生存是谁打的标签,什么时间,还可以生存注解信息。(推荐利用)

  • 为什么要利用标签?

    • 我们可以为紧张的版本(某个里程碑)打上标签,相当于为这次提交纪录指定一个别名,方便提取文件。好比人们在发布某个软件版本(好比 v1.0 等等)的时间,经常这么做。

  • 标签跟分支的区别?

    • 分支会跟着我们的提交移动,指向最新的提交对象,但是标签不会移动,它就是指向某个固定的提交对象


新建标签:git tag -a <name> -m "标签阐明"


  • -a:创建一个带注解的标签
  • -m:添加标签阐明
默认情况下,标签指向最新提交对象,假如要指定标签指向的提交对象,可以指定提交对象ID。git tag -a <name> <commit_id> -m "标签阐明"
  1. # 新建一个标签
  2. git tag -a v1.0 -m "版本1.0"
  3. # 查看所有标签
  4. git tag
  5. # 查看某个标签的详细信息
  6. git show v1.0
  7. # 删除标签
  8. # git tag -d <name>
  9. git tag -d v1.0
  10. # 推送标签到远程仓库
  11. # git push <remote> <tag>
  12. git push origin v1.0
复制代码
通过标签获取对应版本(检出)git checkout -b 当地分支名 标签名
  1. # 获取v1.0版本
  2. git checkout -b test_dev v1.0
复制代码
在VSCode中利用Git

VSCode是微软推出的开源代码编辑器,它内置了Git插件,可以方便地利用Git进行版本控制。


  • 安装Git插件
  • 初始化堆栈
  • 暂存文件 (点击文件右侧的加号)
  • 提交文件
  • 推送到长途堆栈
推送前先拉取,解决辩论,然后再推送。 在vscode中假如在当地进行了修改,git中会有同步修改的提示。点击同步按钮,可以将当地修改同步到长途堆栈。(同步修改等于先拉取,解决辩论,再推送)


  • 分支管理 点击左下角的分支图标,可以检察当前堆栈的分支,切换分支等。
  • 一般来说单个开发职员也不直接基于dev分支进行开发,而是基于dev分支创建自己的分支,好比feature分支。
  • 写完后,在dev分支上进行分支合并feature分支,然后提交dev分支,最后再合并到master分支。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

杀鸡焉用牛刀

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表