Git:在实际开发中的使用(够你用十年)

news/2024/7/8 0:30:14

Repository

我们先来认识一下版本库——Repository,接下来我们所有提到的 Git 基础命令,都是基于版本库的。

那么什么是版本库呢?版本库又名仓库,英文名 repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

仓库又分为本地仓库和远程仓库:

  • 本地仓库:项目在你本地开发机(电脑)存放的历史记录
  • 远程仓库:项目在服务器上(如GitHub、GitLab)的历史记录

接下来,我们首先看看 Git 版本库创建的相关命令。

初始化本地仓库 —— git init

  1. 创建一个空目录,作为项目文件夹

    //创建一个空目录
    mkdir ios-git  
    cd ios-git  
    pwd
    <!-- /Users/xxx/ios-git  -->
    
  2. 初始化仓库

    git init
    

    瞬间 Git 就把本地仓库建好了,而且告诉你是一个空的仓库(empty Git repository),同时在当前目录下多了一个.git的目录,这个目录是 Git 来跟踪管理版本库的,如果你没有看到 .git 目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看到了。

  3. 连接远程仓库
    以只是在本地创建了仓库,团队协作中为了让大家都可以访问,需要把代码放在远程仓库(你可以在GitHub、Gitee或GitLab上创建远程仓库):

git remote add origin ssh://git@git.xxx.com:2289/ios/docs.git
git add .
git commit -m "Initial commit"
git push -u origin main

这样才是一个完整的仓库创建。

克隆现有的仓库 —— git clone

如果远程仓库已经存在项目,你想把项目拉取下来,那就简单了。这时就要用到 git clone 命令,Git 克隆的是该 Git 仓库服务器上的几乎所有数据,每一个文件的每一个版本都将被拉取下来

git clone https://gitcode.net/codechina/help-docs

这会在当前目录下创建一个名为 help-docs 的目录,并在这个目录下初始化一个 .git 文件夹,如果你进入到这个新建的 help-docs 文件夹,你会发现所有的项目文件已经在里面了,准备就绪等待后续的开发和使用。

自定义本地仓库名称

你想在克隆远程仓库的时候,自定义本地仓库的名字:

git clone https://gitcode.net/codechina/help-docs mydocs

以上就是开发的准备工作,初始化Git后,就是在工作中的使用了,下面列举一些常用的Git方法:

Git 常用方法

作用方法备注描述
查看仓库当前状态变化git status git status -s 简短输出查看工作区和暂存区有没有未提交的文件
比较变动git diff readme.txt查看readme.txt具体修改的内容是什么
添加git add readme.txt git add .把文件从工作区添加到暂存区git add .是添加所有修改的文件
提交git commit -m "提交备注" git commit -a git commit -am "提交备注"把暂存区的所有内容提交到当前分支,你可以在 “” 里面备注自己提交的什么 -a是代表add,也就是不用单独再使用add命令了,
拉取git pull git pull origin git pull origin master:devgit pull origin master:dev 拉取master分支合并到dev分支
推送git push git push origin master git push --force origin master 强制推送如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数
查看日志git loggit log --oneline git log --reverse --oneline查看当前HEAD及之前提交的历史记录--oneline 简洁输出--reverse 正序输出,默认时间倒序输出最近时间的
查看修改记录git blame readme.txt查看readme.txt文件的修改记录
重置/回退git reset --hard HEAD^ git reset --hard commit_idGit 中,用HEAD表示当前版本,也就是最新的提交e55063a,上一个版本就是HEAD^,上上一个版本就是HEAD^^,100个^写成HEAD~100,也可重置到指定的commit_id resetHEAD 指向自己重置的提交记录commit_idcommit_id之后的提交记录都不复存在
还原/回滚git revert --hard HEAD^ git revert --hard commit_idgit revert是用来重做某一个 commit 提交的内容,在分支上面会创建了一个新的 commit 提交,我们还原commit_id这条记录时,这条记录提交的代码会被清掉,这条记录之前和之后的代码还在
查看本地日志git reflog查看当前HEAD之前和之后(也就是整个分支)提交的历史记录如果你reset后,第二天后悔了,git log是查不到你昨天的提交记录的,git reflog就可以,然后再用git reset --hard commit_id回到最初的代码reflog并不是Git仓库的一部分,它是本地.git/logs/HEAD或者是.git/logs/refs目录中的文件,只能看到你在本地操作的提交记录。
补提交git commit --amendgit commit --amend -m "提交描述"当你git commitgit push时,发现还有修改需要提交,但是不想再增加commit记录git commit --amend会创建一个新的commit_id覆盖之前的commit_old记录,git log查看记录会看到新的commit_id记录,之前的commit_old记录就没了。
取消暂存git reset HEADgit reset HEAD readme.txt把文件从暂存区恢复到工作区,上面讲到的重置命令是加了--hard,意思是将工作区和暂存区都恢复到最初
撤消修改git checkout . git checkout -- readme.txt文件在工作区没有放到暂存区时(未add),想放弃对文件的修改 git checkout .放弃所有
查看分支git branch 查看本地分支 git branch -a 查看远程分支
创建分支git checkout -b dev git branch dev创建 dev 分支
切换分支git checkout dev git switch dev切到 dev 分支上
合并指定分支到当前分支git merge dev把dev分支合并到当前分支
删除分支git branch -d dev
创建标签git tag v1.0git tag -a v1.0 -m "发布1.0版本"
查看所有标签git tag查看本地标签git ls-remote --tags origin 查看远程标签
删除标签git tag -d v0.1 删除本地标签 git push origin :refs/tags/v0.1 删除远程标签如果你已经推送到远程了,那这两个命令都要用
推送tag标签git push origin v0.1 推送单个taggit push --tagsgit push origin --tags开发中直接使用git push --tags就足够了
查看缓存列表git stash list
缓存git stash git stash save git stash save "xxx"将文件从工作区移除然后放在缓存里,stash 只会操作被git追踪的文件,新增的文件并不会进入缓存,因为git还没有追踪这个新增的文件。
取出缓存git stash pop git stash pop stash@{$num}取出缓存到工作区并从堆栈中移除stash 默认恢复git栈中最新的一个stash@{num},建议在git栈中只有一条的时候使用,以免混乱 也可以指定stash@{$num}
恢复缓存git stash apply git stash apply stash@{$num}将堆栈中的内容恢复到当前分支下,该命令不会将内容从堆栈中删除缓存
移除缓存git stash drop git stash drop stash@{$num}从堆栈中移除stash、移除指定的stash@{$num}
清空缓存git stash clear移除全部的stash

http://lihuaxi.xjx100.cn/news/559497.html

相关文章

ZYNQ printk 缓冲区读取

之前调试kenel &#xff0c;如果kenenl崩溃会&#xff0c;通过内核system.map定位log_buf变量地址&#xff0c;给cpu复位&#xff0c;在u-boot中读取对应的物理地址&#xff0c;即可知道最终内核崩溃最后打出的消息。 我在使用 5.4.154这个内核版本&#xff0c;中没有log_buf这…

4. 识别线程

识别线程线程表示类型为std::id可以通过两种方式进行检索第一种可以通过std::thread 的对象成员函数get_id()来直接获取 第二种是在当前线程中调用std::get_id()void func(){cout<<"print id in son process"<<std::this_thread::get_id()<<endl; …

tomcat组件-Server

目录 概述 tomcat 启动 大致流程 Server StandardServer 利用8005端口关闭tomcat 总结 概述 了解一个程序&#xff0c;一定要知道他是干什么的&#xff0c;以及内部架构如何支撑这么干的&#xff0c;以及牵扯的到的概念、模式等知识点的解析(这里只介绍组件)。 Tomcat是…

<C++>二叉树进阶

文章目录为什么要学这一节1. 二叉搜索树1.1 二叉搜索树概念1.2 二叉搜索树操作1.3 二叉搜索树的实现1.4 二叉搜索树的应用1.5 二叉搜索树的性能分析2. 经典题目2.1 最近公共祖先2.2 从前序与中序遍历序列构造二叉树2.3 二叉树的前序遍历&#xff08;非递归&#xff09;为什么要…

vue新春游戏-拼手速抢车票小游戏,学习玩乐两不误,春节小游戏,新年小游戏

ue新春游戏-拼手速抢车票&#xff0c;老规矩&#xff0c;体验地址&#xff1a;http://game.pkec.net/word-ticket/。 写这个主要是前几天群里运营老师说咋没人写抢车票的&#xff0c;再加上我上一篇文章上了掘金一周&#xff0c;听说多上几次有证书&#xff0c;我还没搞到过掘金…

JVM垃圾回收相关算法-垃圾清除阶段

文章目录学习资料垃圾回收相关算法垃圾清除阶段标记-清除&#xff08;Mark - Sweep&#xff09;算法复制算法标记-压缩&#xff08;或标记-整理、Mark - Compact&#xff09;算法分代收集算法增量收集算法分区算法学习资料 【尚硅谷宋红康JVM全套教程&#xff08;详解java虚拟…

FORM中的日历开发

Calendar是Template提供给我们的standard object.可以使我们方便的为日期型字段提供日期的选择列表. 为项指定值列表 KEY-LISTVAL触发器 calendar.show; calendar.show(SYSDATE);--显示当前时间 相关函数 calendar.show(first_date date default null) calendar.setup(new…

Airtest的UI自动化二、项目初始化

Airtest的UI自动化二、项目初始化 gitlab新建项目 公司的gitlab创建完项目之后还必须添加一个readme.md文档才会真正的创建master分支哦 然后下载到本地 添加虚拟环境 安装基础依赖 pip3 install airtest //airtest引入pip3 install allure-pytest //生成自己想要格式的…