Loading... ## 由来 Git --- The stupid content tracker, 傻瓜内容跟踪器。Linus Torvalds 是这样给我们介绍 Git 的。 Git 是用于 [Linux内核](https://baike.baidu.com/item/Linux内核/10142820)开发的[版本控制](https://baike.baidu.com/item/版本控制)工具。与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持(wingeddevil注:这得分是用什么样的服务端,使用http协议或者git协议等不太一样。并且在push和pull的时候和服务器端还是有交互的。),使[源代码](https://baike.baidu.com/item/源代码)的发布和交流极其方便。 Git 的速度很快,这对于诸如 Linux kernel 这样的大项目来说自然很重要。 Git 最为出色的是它的合并跟踪(merge tracing)能力。[[百度百科]](https://baike.baidu.com/item/GIT) ## 安装 ```bash # CentOS yum install git -y # Windows&macOS&Unix&Linux都可以下面的页面中找到 # https://git-scm.com/downloads ``` ## 概念 - 仓库`Repository`: 分为本地和远程仓库 - 索引`Index`: 也可以叫缓存 - 工作区`Workspace`: 也就是平时写的代码 - 远程仓库`Rmote`: 远程仓库, 例如`GITHUB` > 工作区 –>[add] 索引/缓存 –>[commit] 本地仓库 ···>[push] 远程仓库 > > 远程仓库 –>[clone] 工作区 > > 远程仓库 –>[pull] 本地仓库/工作区 ### Repository仓库, 版本库 git初始化后, 会在当前目录生成一个`.git`目录, 这就是版本库 ### WorkSpace工作空间, 工作区 `.git`所在目录就是工作区, 一般是项目的根目录 ### Index索引 介于工作区和版本库之间, 暂存修改的 ### Remote远程版本库 网络上的另一个版本库, 可以和本地库进行交互 ## 使用 ### 初始化一个空的版本库 ```bash mkdir test cd test git init # 初始化一个空仓库 # Initialized empty Git repository in D:/Test/.git/ ``` ### 添加文件 ```bash # 新建一个index.html文件 cat > 'index.html' <<- EOF <html> <title>Index</title> <body> <div class="index-title">Index</div> <style type="text/css"> .index-title { text-align: center; font-size: 30px; } </style> </body> </html> EOF # 单个文件添加 git add index.html # 添加当前目录下的所有文件 git add . # 查看状态 git status # On branch master # No commits yet # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # new file: index.html # 新文件 ``` #### 文件状态的生命周期 > git status - untracked: 未添加的/未被管理的文件 - unmodified: 被管理的文件 - modified: 被修改的文件 - staged: 放到index中 > untracked –> [add]unmodified –> [edit]mofified –> staged –> [commit] –> unmodified(提交后状态又为unmodified) ### GIT的文件分类 - 追踪的`Tracked`, 已加入版本库中的文件 - 未追踪的`UNtracked`, 未加入到版本库中文件 - 忽略的`Ignored`, `git`不再关注的文件, 例如一些临时文件 `.gitignore`文件中, 目录以`/`结尾, 行起始的`!`是取反的意思 ```bash *.ipynb # 以什么结尾的文件名 __pycache__/ # 所有以__pycache__命名的目录 .* ``` > 忽略文件: https://github.com/github/gitignore > ### 提交代码 > git commit 提交到本地仓库 ```bash git commit -m "第一次提交" # -m 是必须给的 # 如果想要批量的操作 git commit -a -m "Message" # -a, --all # 补充提交 # --amend 提交到当前分支最后一次提交的状态, 不是新提交, 而是追加提交 ``` <div class="tip inlineBlock info"> 每次修改都需要先`add`才能进行`commit` </div> ### 日志 > git log ```bash # 查看全部提交日志 git log commit 695e5464fd2abd72f51e9af7361048bb40b3ed42 Author: libo124 <1240581124@qq.com> Date: Wed Jun 16 11:12:15 2021 +0800 第一次提交 # 查看指定的提交 git log 695e5464fd2abd72f # 不需要全长匹配 commit 695e5464fd2abd72f51e9af7361048bb40b3ed42 Author: libo124 <1240581124@qq.com> Date: Wed Jun 16 11:12:15 2021 +0800 第一次提交 ``` ### 比较 > git diff ```bash git diff # 查看被跟踪文件未暂存的修改, 比较暂存区和工作区 # git diff --cached 查看被跟踪文件暂存的修改, 比较暂存区和上一次commit的差异 # git diff HEAD 查看被跟踪文件, 比较工作区和上一次commit的差异, HEAD指代最后一次提交 ``` #### HEAD - HEAD, 指代最后一次提交 - HEAD^, 指代上一次提交 - HEAD^^, 指代上上一次提交 - HEADE~n, 上n次提交 ### 检出与重置 | 命令 | 说明 | | -------------------------- | ------------------------------------------------------------------------------------ | | git checkout | 列出暂存区可以被检出的文件 | | git checkout file | 从暂存区检出文件到工作区, 就是覆盖工作区,文件, 可以指定检出的文件, 但是不清楚stage | | git checkout commit file | 检出某个commit的指定文件到暂存区和工作区 | | git checkout . | 检出暂存区的所有文件到工作区 | | git reset | 列出被重置的文件 | | git reset file | 重置文件的暂存区, 和上一次commit一致.工作区不影响 | | git reset -hard | 重置暂存区和工作区, 与上一次commit保持一致 | **其他命令** | 命令 | 说明 | | -------------------------- | ---------------------------------------------------------------------------------- | | git reflog | 显示commit信息, 只要HEAD发生变化, 就可以在这里看到 | | git reset commit | 重置当前分支的HEAD为指定的commit, 同时重置暂存区, 但工作区不变 | | git reset -hard [commit] | 重置当前分支的HEAD为指定的commit, 同时重置暂存区和工作区, 与指定的commit保持一致 | | git reset -keep [commit] | 重置当前HEAD为指定commit, 但保持暂存区和工作区不变 | ### 移动和删除 > git mv src dest 改名, 直接把改名的改动放入到暂存区 > git rm file 会同时在版本库和工作目录中删除文件, 是完整的删除 > git rm –cached file 将文件从暂存转为未暂存, 从版本库中删除, 但不删除工作目录的该文件,即文件恢复成不追踪的状态 ### push到服务器 #### 配置 ```bash git config --global user.name "USERNAME" git config --global user.email "1240581124@qq.com" # 以上配置只是作为一些标签的使用, 与认证无关 ``` #### push ```bash git remote add origin https://git.beijixs.cn/libo/test.git # 添加到远程仓库 # origin 只是本地的一个名字 cat .git/config # 项目的配置文件 [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = https://git.beijixs.cn/libo/test.git fetch = +refs/heads/*:refs/remotes/origin/* [user] name = libo email = 1240581124@qq.com # 如果远程有文件了, 需要先合并或新建一个分支 git pull origin master git push -u origin master # -u 表示更新, 第一次push建议加上 ``` #### 克隆 ```bash git clone https://git.beijixs.cn/libo/test.git ``` #### 临时存储 临时存储, 先不推送到服务器 ```bash Pychrom中VCS -> git -> stash changes # 创建一个临时保存 Pychrom中VCS -> git -> Unstash changes # 恢复/合并临时存储 ``` ### 分支 分支命名规则 - 分支名在版本库中必须唯一 - 不能以`-`开头 - 可以使用`/`,但是不能以它结尾, 被它分割的名称不能以`.`开头 - 不能使用两个连续的`.`, 如: `..` - 不能包含任何空白字符和GIT的特殊符号 #### 创建分支 ```bash git checkout -b "dev" # 新建一个分支 # -B 新建分支, 如果存在就覆盖 git push origin dev # 推送到分支 ``` #### 合并分支 用`master`合并分支代码 - No FF合并: 这个合并表示两个分支进行合并, 如下 ```bash Msater --> Master & Dev (No FF) ↘ ↗ Dev --> Dev Changed ``` - FF合并: ```bash Msater | Master --> Dev --> Dev Changed ↘ | # 直接合并到master分支 Dev --> Dev Changed | ``` 合并前需要先切回`master`分支 ```bash git checkout master ``` ![请输入图片描述](https://blog.beijixs.cn/usr/uploads/2021/06/603938757.png) 然后合并`dev`分支到`master` ![请输入图片描述](https://blog.beijixs.cn/usr/uploads/2021/06/849665892.png) ### GitFlow工作流 <div class="tip inlineBlock info"> 最佳实践: 使用`Git`一般至少2个分支: `master`和`develop` </div> - master: 生成环境都来主干上拿数据部署, 也可以使用钩子自动完成 - deveop:开发分支, 开发人员都是检出这个分支进行开发 最后修改:2021 年 06 月 16 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏
6 条评论
《家乡的消息》记录片高清在线免费观看:https://www.jgz518.com/xingkong/120141.html
《月落玉长河》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/21421.html
你的文章让我感受到了快乐,每天都要来看一看。 https://www.yonboz.com/video/83774.html
《虹桥旅馆》喜剧片高清在线免费观看:https://www.jgz518.com/xingkong/94944.html
《绝色小神医》国产剧高清在线免费观看:https://www.jgz518.com/xingkong/34386.html
看的我热血沸腾啊https://www.jiwenlaw.com/