【学习笔记】git 使用文档

news/2024/7/1 6:13:55

安装 git

# mac 环境
brew install git

检查是否安装成功

➜  ~ git --version
git version 2.20.1 (Apple Git-117)

卸载 git

➜  ~ which -a git
/usr/bin/git
➜  ~ cd /usr/bin
➜  bin sudo rm -rf git*

git init 命令

  1. 对一个空文件,git 初始化。文件名称增加了’git:(master)’,说明初始化成功了。
➜  mygit git init
Initialized empty Git repository in /Users/maimai/Documents/Demo/mygit/.git/
➜  mygit git:(master)
  1. 查看当前文件目录结构。发现原空文档下,多了一个.git文件夹。
➜  mygit git:(master) tree -a
.
└── .git├── HEAD		# 包含了一个分支的引用,通过这个文件Git可以得到下一次commit的parent,可以理解为指针├── config		# git仓库的配置文件├── description	# 仓库的描述信息,主要给gitweb等git托管系统使用├── hooks		# 存放一些shell脚本,可以设置特定的git命令后触发相应的脚本│   ├── applypatch-msg.sample│   ├── commit-msg.sample│   ├── fsmonitor-watchman.sample│   ├── post-update.sample│   ├── pre-applypatch.sample│   ├── pre-commit.sample│   ├── pre-push.sample│   ├── pre-rebase.sample│   ├── pre-receive.sample│   ├── prepare-commit-msg.sample│   └── update.sample├── info		# 存放仓库的一些信息│   └── exclude├── objects		# 存放所有的git对象│   ├── info│   └── pack└── refs├── heads	# 保存当前最新的一次提交的哈希值└── tags

查看部分文件:

➜  mygit git:(master) cat .git/HEAD		# 下一次commit的parent
ref: refs/heads/master
➜  mygit git:(master) cat .git/config	# git仓库的配置文件
[core]repositoryformatversion = 0filemode = truebare = falselogallrefupdates = trueignorecase = trueprecomposeunicode = true

取消 git init 操作的命令为 rm -rf .git。git 初始化本质是增加了一个.git文件,删除之后即取消了初始化。

文件的状态变化周期

untrackedstagedmodifiedunmodifiedgit add {file}git reset HEAD {file}git commit -mgit rm --cached {file}编辑文件git rm --cached {file}git checkout -- {file}git add {file}untrackedstagedmodifiedunmodified
  1. untracked:未跟踪状态 —— 工作区增加新文件s, 但并没有加入到 git 库, 不参与版本控制。通过 git add 命令变为 staged 状态。
  2. staged: 已暂存状态 —— 对已修改文件的当前版本做了标记,存放在一个不可见的暂存区域,做为下次提交的内容的一部分。执行git commit则将修改同步到库中.
  3. unmodified:未修改状态 —— 文件已入库, 即版本库中的文件快照内容与文件夹中完全一致。
  4. modified: 已修改状态 —— 在工作目录下修改了文件。

查看初始状态

初始状态,工作区为最新代码,.git 文件保存版本库和暂存区内容【初始化的 git 项目,无暂存区】

➜  mygit git:(master) git status	# 初始状态
On branch masterNo commits yetnothing to commit (create/copy files and use "git add" to track)

增加文件

初始状态,增加文件 README.md 后,由初始状态转化为 untracked 状态(修改也存在的文件,状态更新为 modified)
修改内容仅存在本地工作区,版本库和暂存区都与master保持一致,未被修改【.git文件夹未更新】

➜  mygit git:(master) vi README.md
➜  mygit git:(master) ✗ tree		# 查看文档结构,其中添加了一个文件
.
└── README.md0 directories, 1 file
➜  mygit git:(master)git status	# 增加文件后,查看git状态,更换为 untracked
On branch masterNo commits yetUntracked files:(use "git add <file>..." to include in what will be committed)README.mdnothing added to commit but untracked files present (use "git add" to track)

git add .

使用 git add . 命令,将工作区中的修改文件 README.md 放进暂存区。此时处于暂存区的 README.md 文件处于staged状态【.git 目录下增加 index 和 objects/d6/1d841cf82eef2774ac3e57fb5072b9ef67b4fb】

➜  mygit git:(master)git add README.md	# 使用 add 命令,将修改内容放进暂存区
➜  mygit git:(master)git status			# add 命令后,原 untracked 状态修改为committed
On branch masterNo commits yetChanges to be committed:(use "git rm --cached <file>..." to unstage)new file:   README.md

查看此时 mygit 的结构,发现 .git 文件夹下多了一个index的文件。

➜  mygit git:(master) ✗ tree -a
.
├── .git			# 保存项目的元数据、版本和分支的地方
│   ├── HEAD
│   ├── config
│   ├── description
│   ├── hooks
│   │   ├── applypatch-msg.sample
│   │   ├── commit-msg.sample
│   │   ├── fsmonitor-watchman.sample
│   │   ├── post-update.sample
│   │   ├── pre-applypatch.sample
│   │   ├── pre-commit.sample
│   │   ├── pre-merge-commit.sample
│   │   ├── pre-push.sample
│   │   ├── pre-rebase.sample
│   │   ├── pre-receive.sample
│   │   ├── prepare-commit-msg.sample
│   │   └── update.sample
│   ├── index			# 暂存区。Git 术语叫做“索引”
│   ├── info
│   │   └── exclude
│   ├── objects			# 对象数据库
│   │   ├── d6
│   │   │   └── 1d841cf82eef2774ac3e57fb5072b9ef67b4fb
│   │   ├── info
│   │   └── pack
│   └── refs
│       ├── heads
│       └── tags
└── README.md10 directories, 19 files
➜  mygit git:(master)cat .git/index	
DIRC_ÛE$Ya�_ÛE$Ya<��������.�'t�>W�Pr��g��	README.md`��\A�k�$�����mdU%

使用 git ls-files --stage 命令可以查看暂存区内容

➜  mygit git:(master) ✗ git ls-files --stage	
100644 0d862c702122bb62b6c21a2fc2f83128aa5a57b3 0	README.md

git丢弃本地修改 git checkout . && git clean -xdf

git commit -m

使用 git commit 命令,将暂存区的目录树写到版本库中。处于 staged 状态的 README.md 处于unmodified 状态。

➜  mygit git:(master)git commit -m 'first initial'	# 提交更新
[master (root-commit) 9d5ae58] first initial1 file changed, 1 insertion(+)create mode 100644 README.md
➜  mygit git:(master) git status		# 暂存区的文件写入.git文件
On branch master
nothing to commit, working tree clean

非初次提交状态,使用 git commit -a -m 'xxx' 可替代 git addgit commit 过程。直接从本地提交到版本库

git rm / git restore

修改文件并提交到暂存区后,使用 git rm --cached {filename} 命令 或 git restore --staged {filename},直接从暂存区删除文件,工作区修改保持不变

➜  mygit git:(master)git rm --cached README.md
rm 'README.md'
➜  mygit git:(master)git status
On branch masterNo commits yetUntracked files:(use "git add <file>..." to include in what will be committed)README.mdnothing added to commit but untracked files present (use "git add" to track)

git checkout

使用 git chekout . 命令 或 git chekout -- {filename},工作区的全部或指定文件被替换为暂存区中的文件。工作区的被更新的文件或存在被覆盖的风险。

➜  mygit git:(master) vi demo1.py
➜  mygit git:(master) ✗ python demo1.py
hello word!
➜  mygit git:(master)git checkout .
Updated 1 path from the index
➜  mygit git:(master) git status
On branch master
nothing to commit, working tree clean
➜  mygit git:(master) ls
README.md demo1.py
➜  mygit git:(master) cat demo1.py
➜  mygit git:(master)

git checktout HEAD .git checktout HEAD . 命令,会用 HEAD 指向的master分支中全部或部分文件替换暂存区及工作区的文件。

cat .gitignore		# 忽略某些文件
git diff			# 查看尚未暂存的文件更新了哪些部分
git diff --cached	# 查看已暂存的文件与上次提交的快照之间的差异
git commit			# 提交更新
git commit -a -m 'first initial'	# 跳过使用暂存区域的方式,自动将已跟踪过的文件暂存起来一并提交
git rm -f a.test		# 从git强制移除文件a.text
git rm --cached readme.txt
git restore --staged readme.txt

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

相关文章

stackoverflow_StackOverflow帐户如何确保您在公认的开发人员表格中占有一席之地

stackoverflowby Melchor Tatlonghari由Melchor Tatlonghari StackOverflow帐户如何确保您在公认的开发人员表格中占有一席之地 (How a StackOverflow account can secure you a seat at the recognised developer table) I have never met a developer who hasn’t heard of …

AR介绍

AR介绍 AR全名扩增实境&#xff0c;是一种实时融合现实与虚拟的图像技术。 AR技术的三板斧&#xff1a;感知&#xff08;寻找目标定位位置-与环境交互&#xff09;&#xff0c;渲染&#xff08;实现产品交互-与客户交互&#xff09;&#xff0c;追踪&#xff08;捕捉目标运动轨…

创始区块链初始化

想知道更多区块链技术知识&#xff0c;请百度【链客区块链技术问答社区】如果通过创世区块来初始化区块链的话&#xff0c;首先需要一个初始化区块链的json文件&#xff0c;如下。 { “config”: { “chainId”: 15, “homesteadBlock”: 0, “eip155Block”: 0, “eip158Block…

Windows Phone SDK update for Windows Phone 7.8

下载&#xff1a;http://www.microsoft.com/en-us/download/details.aspx?id36474 (在线安装) http://kuai.xunlei.com/d/cHbJCAIX4wBNVgFR5aa (离线下载 全语言 5.5G....) MS博客介绍&#xff1a;http://blogs.windows.com/windows_phone/b/wpdev/archive/2013/01/22/now-a…

测试覆盖率

一、概念 覆盖率&#xff1a;用来度量测试完整性的一个手段&#xff0c;大体可划分为逻辑覆盖和功能覆盖 覆盖率 &#xff08;至少被执行一次的 item 数&#xff09;/ item 的总数二、常用的逻辑覆盖 覆盖率中最常见的是逻辑覆盖率(Logic Coverage)&#xff0c;也叫代码覆盖…

docker使用mongo_如何使用Docker在AWS上部署Mongo:初学者的权威指南

docker使用mongo为什么需要这个&#xff1f; (Why you need this?) 因为JS Python Mongo 完整的数据开发 (Because JS Python Mongo full data development) I am a Meteor developer. More precisely I use Vulcan.js, but that’s a whole other story. Meteor is a fu…

@RequestBody和@RequestParam区别

转载自&#xff08;http://blog.csdn.net/xinluke/article/details/52710706&#xff09; RequestParam 用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。&#xff08;Http协议中&#xff0c;如果不指定Content-Type&#xff0c;则默认传递的参数就是a…

入职后发现公司是外包全职_我如何通过全职工作,伴侣和3岁的双胞胎男孩打造产品...

入职后发现公司是外包全职by Courtney通过考特尼 我如何通过全职工作&#xff0c;伴侣和3岁的双胞胎男孩打造产品 (How I built my product with a full-time job, partner and 3 year old twin boys) If you’ve opened this article then I’ll assume that you’re either …