Please enable Javascript to view the contents

Git-备忘录

 ·  ☕ 7 分钟

1.简介

git-cheat-sheet

0. git 配置

git config 用于设置所有本地仓库的配置值,如user.nameuser.email等。

命令描述
git config –global user.name “[firstname lastname]”全局,设置 Git 用户名。
git config –global user.email “[valid-email]”全局,设置 Git 电子邮件。
git config –global color.ui auto全局,启用 Git 输出自动着色,即 Git 在输出到终端时会自动着色。
git config –list显示系统上 Git 的所有生效配置。

1. 开始

两种方式创建一个GIT仓库。一种远端创建仓库,执行git-clone命令克隆至本地;另一种是本地普通文件夹,执行git-init命令初始化为git仓库,再 git remote 添加远端后,git push至远端。

  • git init: 将一个普通目录初始化为Git仓库。即,在此目录下创建.git目录,包含Git仓库的基本结构,不涉及远端仓库。
  • git clone: 从远端仓库完整clone至本地。即,初始化本地仓库(~ git init),从远端仓库创建一个包含所有文件、历史记录的本地仓库,并,创建 origin 的git reemote指向远端仓库,自动切换至默认分支。

git clone 近似等于 git initgit remote add origin [git_url]git fetch origingit checkout -b main origin/main

2. 拉取远端信息

  • git pull: 将从远端仓库拉取最新提交、并合并到当前本地分支。但不会拉取远端的新分支、标签。相当于 git fetchgit merge的组合命令。
  • git fetch: 从远端仓库获取最新数据(存储在refs/remotes),但不会自动合并或修改当前工作目录中的文件。

git pull 拉取并合并远程分支。先执行 git fetch,然后执行 git merge,可能会导致冲突。
git pull --tags 拉取最新的提交和标签信息并合并。与 git pull 类似,但同时拉取标签信息。
git pull --rebase 拉取并重新应用本地提交。使用rebase而不是merge,保持提交历史的线性。
git fetch 拉取远端仓库的最新信息。默认更新origin远端的所有本地跟踪分支,但不会自动合并到当前分支。
git fetch --all 拉取所有远程仓库的最新信息。更新所有remote的所有本地跟踪分支
git fetch --tags 拉取最新的标签信息。确保本地仓库中的标签是最新的。
git fetch <remote> <branch> 拉取指定远端特定分支的最新信息。remotebranch都是可选参数。

如果需要同步远程仓库中的所有最新信息(包括新分支和标签),必须执行 git fetch。在多人协作的项目中,定期执行git fetch是一个很好的实践,可以及时了解远程仓库的最新状态,避免冲突.

除此之外,还有 git clonegit remote updategit ls-remotegit remote prune是直接与远程仓库交互,拉取信息的。

3. 主线操作

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 克隆远端仓库
git clone [git_url] <文件夹名称,为空时=git_url最后部分>

# 添加文件至暂存区
git add [文件名] 或 git add .

# 提交到本地仓库
git commit -m "提交信息"

# 推送远端
git push origin

git-cmd-work

git-cmd-work-2

4. 本地工作目录切换

  • git checkout: 用来切换工作目录状态。四种用途:切换分支(git checkout [分支名])、检出远端分支(git checkout origin/[分支名])、创建并切换至新分支(git checkout -b [New_branch] [S_Branch])、检出特定提交(git checkout [COMMIT_HASH])。

checkout命令只是本地仓库的分支之间切换,包括检出远端分支, 也仅仅是将工作目录却换至 git fetch 获取的远端跟踪分支上。

5. 分支操作

命令描述
git branch列出所有本地分支
git branch -a列出所有本地和远程分支
git branch [分支名]创建一个新分支
git branch -d [分支名:master]删除一个本地分支
git branch -dr [分支名:origin/master]删除一个本地 远端跟踪分支
git push origin --delete [分支名]删除一个远程分支
git checkout -b [分支名]创建并切换到一个新分支
git checkout -b [分支名] origin/[分支名]克隆并切换到一个远程分支
git checkout [分支名]切换到一个分支
git checkout --切换到上次检出的分支
git checkout -- [文件名.txt]用于丢弃对文件所做的任何更改
git merge [分支名]将一个分支合并到当前活动分支

4. 暂存改动,避免冲突

用于使用提交创建工作的临时快照。这在各种情况下都很有用,例如试验更改或处理尚未准备好永久提交到版本历史的功能。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 保存当前工作区的更改
git stash

# 查看 Stash 列表
git stash list

# 应用最新的 Stash
git stash apply

# 删除最新的 Stash
git stash drop

撤销操作

  • 撤回工作区改动

用于快速丢弃对文件的改动,但不影响已暂存的文件。

1
2
# 撤销工作区的文件(丢弃Workspace内容不变, 暂存区不变)
git checkout -- [文件名]
  • 撤销 git add 操作
1
2
# 撤销暂存区的文件(撤回add, 保留Workspace内容不变)
git reset [文件名]
  • 撤销 git commit 操作
1
2
3
4
5
6
7
8
# 撤回最近一次commit(撤回commit,保留add,Workspace内容不变)
git reset --soft HEAD^

# 撤销最近一次commit(撤回commit,撤回add,Workspace内容不变)
git reset --mixed HEAD~1

# 撤销最近一次commit(撤回commit,撤回add,Workspace内容丢弃,重置为上一次提交的状态)
git reset --hard HEAD~1

  • 撤回 git push 操作

当执行了git push命令想要撤回,可以使用git reset HEAD^将本地仓库回退到当前版本的上一个版本,代码的修改会保留在工作区,然后使用git push origin xxx --force将本地仓库当前版本的代码强制推送到远程仓库。

1
2
git reset HEAD^
git push origin [分支名] --force

5. archive远端指定代码

archive 命令是将本地仓库的分支打包,不涉及远端仓库,因此需要 fetch 远端的信息

1
2
3
4
5
6
mkdir example-git && cd example-git

git init
git remote  add origin [git_url]
git fetch   origin master
git archive origin/master > master.tar

注:压缩包通过tar -xvf master.tar解压,还可以通过--format=zip归档zip格式压缩包,默认归档tar包。

概念说明

git仓库结构

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
example-project/     
├── .git/
│   ├── objects/          # 存储Git对象文件(如提交、树、blob等)
│   ├── refs/             # 存储引用文件(分支、标签)
│   │   ├── heads/        #     `本地分支`的引用
│   │   └── tags/         #     `标签`的引用
│   ├── hooks/            # 钩子脚本,在特定的git操作时触发(如提交、推送等)
│   ├── info/             # 存储全局信息。如exclude文件,用于忽略某些文件。
│   ├── config            # 配置文件,仅对当前仓库生效(如proxy等)
│   ├── HEAD              # 指向当前分支的引用
│   ├── description       # 描述仓库的用途(通常用于服务器端仓库)。
│   ├── index             # 暂存区,用于记录暂存区状态。(暂存区是暂存即将提交的文件的地方)。
│   └── logs/             # 日志文件,用于记录分支和引用的变更历史。
└── [其他项目文件]

git config 级别

可以通过命令git config --list查看所有配置,git config --system --list 查看系统级别配置;以此类推。

–local 本地级。配置对单个仓库生效(配置文件位置:repository folder/.git/config)
–global 全局级。配置对当前用户所有仓库生效(配置文件位置:~/.gitconfig)
–system 系统级。配置对当前机器所有用户生效(配置文件位置:/etc/gitconfig)

术语

术语描述
originorigin 代表远端仓库。当使用git push -u origin local_branch时,系统提示把本地分支推送到远程仓库。通常有一个默认的远程仓库,origin 就代表这个默认仓库。还可以通过命令git remote rename origin new_name修改origin的名称
HEADHEAD 代表活动/当前分支的最后一次提交。每个版本库只有一个当前分支,因此也只有一个HEAD。可以通过命令cat .git/HEAD查看git仓库的HEAD指向哪里。当checkout命令应用于特定的历史提交、标签、远程分支时,就会出现分离HEAD的情况。
mastermaster 是默认主分支,git-2.28版本开始,默认主分支名称改为main。 。
branchbranch就像是版本库历史中的一个分叉。一个branch代表一条独立的开发线路,就像叉齿一样。
Workspace工作区。
stage(index)暂存区,是建议的下一次提交,也被称为index。
repository本地仓库。
remote远端仓库。

GIT-explain

Reference

分享

Hex
作者
Hex
CloudNative Developer

目录