【学习笔记】git 使用文档

安装 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 = 0
	filemode = true
	bare = false
	logallrefupdates = true
	ignorecase = true
	precomposeunicode = true

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

文件的状态变化周期

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

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

➜  mygit git:(master) git status	# 初始状态
On branch master

No commits yet

nothing 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.md

0 directories, 1 file
➜  mygit git:(master)git status	# 增加文件后,查看git状态,更换为 untracked
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	README.md

nothing 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 master

No commits yet

Changes 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.md

10 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 initial
 1 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 master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	README.md

nothing 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值