Git——常用命令总结

2024-08-14 15:50:59 浏览数 (3)

前言

记录日常中常用的Git命令

安装

Git官网 | Git官网

Git下载 | Git下载

配置

配置user.nameuser.email

代码语言:javascript复制
git config --global user.name 'your_name'
git cofig --global user.email 'your_email@domain.com'

# 将默认编辑器设置为vim
git config --global core.editor vim

作用域

代码语言:javascript复制
# 某个仓库有效(默认)
git config --local

# 全局有效(当前用户所有仓库有效)
git config --global

# 系统所有登陆用户有效
git config --system

显示config配置

代码语言:javascript复制
# 查看本地配置
git config --list --local

# 查看全局配置
git config --list --global

# 查看系统配置
git config --list --system

创建仓库

代码语言:javascript复制
cd your_project 
git init 
git config --global user.name 'your_name'
git cofig --global user.email 'your_email@domain.com'
git remote add origin <git addr>
git add -A
git commit -m "add file"
git push

目录结构

代码语言:javascript复制
.git
├─ COMMIT_EDITMSG
├─ FETCH_HEAD
├─ HEAD #该文件表示当前本地签出的分支,例如存储的值:ref: refs/heads/master
├─ ORIG_HEAD
├─ config
├─ description
├─ hooks
│    ├─ 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
├─ index #存储缓冲区(GitExtensions中的stage)的内容,内容包括它指向的文件的时间戳、文件名、sha1值等;(git三大区域:工作区,暂存区,历史记录区)
├─ info
│    ├─ exclude
│    └─ refs
├─ logs
│    ├─ HEAD
│    └─ refs
│           ├─ heads
│           ├─ remotes
│           └─ stash
├─ objects #存储对象的目录,本地仓库,git中对象分为三种:commit对象,tree对象(多叉树),blob对象
│    ├─ 06
│    │    └─ abbb19400a205bdbd1dc0a28b986323fc8b808
│    ├─ 0e
│    │    └─ 5d9122f24db7db88b7688759bf457be74e8643
│    ├─ 16
│    │    └─ 89c24264c1fde08df4773db3cfbf6316d7e2b3
│    ├─ 2c
│    │    └─ 936a4ca60dd5c8f4ceeb9fede83a2c2f2c69b5
│    ├─ 48
│    │    └─ 0be438bab34a5361d8949f690a346973b8eb79
│    ├─ 72
│    │    └─ 7c5abd67dfeb49ee214b6a112445fbb550d3c5
│    ├─ bd
│    │    └─ 3441fa796371e5f796a1d522f8052b763ad533
│    ├─ f1
│    │    └─ 894b05a9021dded510f71fef2be2cfb9864db6
│    ├─ info
│    │    └─ packs
│    └─ pack
│           ├─ pack-76de1ecd79b2e31879a027b482c07377610a8bd6.idx
│           └─ pack-76de1ecd79b2e31879a027b482c07377610a8bd6.pack
├─ packed-refs
└─ refs #存储指向branch的最近一次commit对象的指针,也就是commit对象的sha-1值(就是hash值,sha-1是一种散列算法),refs的目录下包括以下目录(git init后并没有remotes和stash,需要有从remote地址中pull code等交互性操作才会出现remotes目录,stash文件则是做了stash操作才会出现):
       ├─ heads
       │    ├─ dev
       │    ├─ master
       │    └─ tb-customer
       ├─ remotes
       │    └─ origin
       └─ stash

命令详解

add

代码语言:javascript复制
# 将工作空间修改和删除的文件添加到暂存区
git add -u 

# 将工作空间新增和被修改的文件添加的暂存区
git add .

# 将工作空间新增、修改和删除的文件添加到暂存区
git add -A

mv

代码语言:javascript复制
# 修改文件名称
git mv <old_name> <new_name>

rm

代码语言:javascript复制
# 删除文件
git rm <file_name>

log

代码语言:javascript复制
# 查看单行的简洁日志
git log --oneline

# 查看最近2条简洁日志
git log --oneline -n4
git log --oneline -4

# 查看所有分支的历史日志
git log --all

# 以图形化展示历史日志
git log --all --graph

# 以图形化展示所有分支的最近4条简洁日志
git log --all --oneline -4 --graph

# 在网页端查看git log命令文档
git help --web log

# 在GUI界面查看
gitk --all

commit

代码语言:javascript复制
# 修改上一次提交commit信息
git commit --amend

# 修改指定commit信息
git rebase -i <commit_id>
r  <修改commit信息>
p  <保留commit信息>

# 把连续多个commit合并成一个
git rebase -i <last_commit_id>
p  <需保留的cmmit信息>
s  <需合并到上一个commit信息>

# 把间隔的commit合并成一个
git rebase -i <last_commit_id>
p  <需保留的commit信息>
s  <把需要合并的commit的移动到需要保留的commit下面并选择squash策略>

rebase策略

代码语言:javascript复制
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# .       create a merge commit using the original merge commit's
# .       message (or the oneline, if no original merge commit was
# .       specified). Use -c <commit> to reword the commit message.

diff

代码语言:javascript复制
# 比较暂存区和HEAD所含文件差异
git diff --cached
git diff --staged

# 比较工作区和暂存区所含文件差异
git diff 

# 比较工作去和暂存区指定文件差异(可比较多个文件)
git diff -- <file_name_1> <file_name_2>

# 比较两个commit之间的差别
git diff <commit_id_1> <commit_id_2>

# 比较两个commit之间的指定文件差别
git diff <commit_id_1> <commit_id_2> -- <file_name>

reset

代码语言:javascript复制
# 将暂存区恢复成和HEAD一样
git reset HEAD

# 将暂存区指定文件恢复成和HEAD一样(可多个文件)
git reset HEAD -- <file_name_1> <file_name_2>

# 将暂存区恢复到指定的commit
git reset --hard <commit_id>

# 将指定文件的工作区恢复成和暂存区一样
git checkout -- <file_name>
git restore -- <file_name>

branch

代码语言:javascript复制
# 查看本地所有分支
git branch -v

# 删除指定分支
git branch -d <branch_name>

# 强制删除指定分支
git branch -D <branch_name>

checkout

代码语言:javascript复制
# 创建新的分支
git checkout -b <branch_name>

# 切换分支
git checkout <branch_name>
git switch <branch_name>

stash

代码语言:javascript复制
# 存储当前修改
git stash

# 查看stash列表
git stash list

# 恢复之前存储内容(保留stash信息)
git stash apply

# 恢复之前存储内容(删除stash信息)
git stash pop

remote

代码语言:javascript复制
# 添加远程分支(一般使用智能协议[http/https|ssh])
git remote add <local_barnch_name> <remote_address>

# 查看本地分支
git remote -v

# 查看所有分支
git remote -va

fetch

代码语言:javascript复制
# 拉取远程所有分支
git fetch --all

# 拉取指定分支
git fetch <local_branch_name> <remote_branch_name>

#

merge

代码语言:javascript复制
# 合并和远程不相关的分支
git merge --allow-unrelated-histories <remote_branch_name>

# 图形化合并界面
git mergetool

1 人点赞