工作常用之Git命令

Git常用命令

Git 全局设置

1
2
git config --global user.name "账户名"
git config --global user.email "邮箱"

克隆仓库

1
2
3
4
5
6
git clone https://gitee.com/czcsw/git-learning.git
cd git-learning
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master

已有文件夹或仓库

1
2
3
4
5
6
cd existing_folder
git init
git remote add origin https://gitee.com/czcsw/git-learning.git
git add .
git commit
git push -u origin master

Git创建本地仓库

1
2
3
4
5
6
7
8
# 初始化仓库
git init
# 查看仓库状态
git status
# 追踪 test.txt 文件
git add test.txt
# 提交至版本库
git commit -m "Add first file"

三个区域

  1. 工作区:平时工作时创建的一系列文件
  2. 暂存区:暂存区是用于存储即将被提交到版本库中的文件快照。暂存区实际上是一个文件,它存储在仓库目录下的 .git目录下的 index。
  3. 版本库:版本库是 Git 用来保存项目历史记录的地方,包含了所有的提交记录和文件变更。版本库通常保存在 .git 目录中,包含 Git 对象数据库、分支引用信息、标签引用信息、提交日志等。

三个状态

  1. 已修改:在工作区修改后,但是并未git add
  2. 已暂存: 执行了git add操作后
  3. 已提交:执行了git commit操作后

Git更新文件并提交

1
2
#跳过暂存区,直接将更改提交到版本库中
git commit -a -m "Commit message"

查看提交历史

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 显示完整的提交记录
git log
# 提交标记和信息显示在一行内
git log --pretty=oneline
# 只显示某个作者的提交
git log --pretty=oneline --author="aku"
# 显示最近的两个提交记录
$ git log --pretty=oneline --max-count=2
# 显示五分钟前的所有提交记录
$ git log --pretty=oneline --since='5 minutes ago'
# 显示五分钟内的所有提交记录
$ git log --pretty=oneline --until='5 minutes ago'
# 显示当前分支上所有的提交历史
$ git log --pretty=oneline --all
# 配置别名,并显示简洁信息,在对应的.git/config文件中增加以下配置,最终以 git hist查看
[alias]
hist = "log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short"

切换版本

1
2
3
4
5
6
7
8
9
10
# 查看提交日志
$ git hist
# 切换指定版本,最后面的参数对应版本的hash
$ git checkout 2886ef9
# 运行 git stash 命令,将当前的修改保存到一个新的存储区(stash)中。这个存储区可以理解为一个临时的提交。
$ git stash
# 当你想要恢复之前保存的修改时,可以使用 git stash apply 命令
$ git stash apply
# 如果你想要删除 stash,可以使用 git stash drop 命令
$ git stash drop

切换前的文件,如果有未提交的文件,可以先git stash以下,后面再切换回来是git stash apply


执行切换命令后,可以看到指针指向了7月11号,之前提交的文件都回到了11号的记录


当然也可以再切换回来,虽然现在历史记录没有显示后面的版本,直接 git checkout 最后提交hash值

标签操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看状态
$ git status
# 如果不在主分支,切换至主分支
$ git checkout master
# 把最新一次提交标记为 v1
$ git tag v1
# 切换至 v1 的父级
$ git checkout v1^
# 打上标记
$ git tag v1-beta
# 显示当前可用的标签
$ git tag
# 删除标签
$ git tag -d v1

撤销修改-本地已保存状态

1
2
3
4
# 查看文件内容
$ cat .\test.txt
# 恢复
$ git checkout test.txt

撤销修改-已暂存状态下

1
2
3
4
5
6
7
8
9
10
11
12
# 查看文件内容
$ cat .\test.txt
# 添加到暂存区
$ git add test.txt
# 查看状态
$ git status
# 撤销暂存文件,HEAD 是一个指针,它指向当前分支所在的提交。
$ git reset HEAD test.txt
# 撤销暂存前更改
$ git checkout test.txt
# 查看 Git 状态
$ git status
  • reset 命令 改变了当前分支的历史记录,并可以影响暂存区和工作目录的状态。例如,使用 git reset --hard <commit-SHA> 命令将会重置当前分支的历史记录并强制更新工作目录和暂存区以匹配指定的提交。
  • checkout 命令 则是切换到不同的分支或提交,但不会更改当前分支的历史记录。例如,使用 git checkout <branch-name> 命令将会切换到指定的分支,并将 HEAD 指针移到该分支的最新提交上。

还原修改-已提交状态下

1
2
3
4
5
6
7
8
# 查看文件内容
$ cat .\test.txt
# 提交到版本库
$ git commit -a -m "Added 123 to the test.txt"
# 查看提交日志
$ git hist
# 撤销最后一次提交,并创建一个新的提交来还原更改。`--no-edit` 跳过编辑提交消息的步骤
$ git revert HEAD --no-edit

从分支中删除提交

1
2
3
4
5
6
7
8
9
10
# 查看文件内容
$ cat .\test.txt
# 提交到版本库
$ git commit -a -m "Oops,an error committed"
# 查看提交日志
$ git hist
# 打上标签 oops
$ git tag oops
#恢复提交之前的文件
$ git reset --hard v1

忽略文件.gitignore

有一些文件我们并不需要让 Git 管理,比如临时文件、日志文件等。Git 为我们提供忽略文件的配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Build and Release Folders
bin-debug/
bin-release/
[Oo]bj/
[Bb]in/

# Other files and folders
.settings/

# Executables
*.swf
*.air
*.ipa
*.apk

# Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties`
# should NOT be excluded as they contain compiler settings and other important
# information for Eclipse / Flash Builder.

创建分支

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 新建分支
$ git checkout -b lgnew
# 查看状态
$ git status
# 暂存
git add .\lab\test2.txt
# 提交
$ git commit -m "Added teset2.txt"

# 切换主分支
git checkout master
# 查看状态
git status
# 暂存
git add .\lab\test3.txt
# 提交
git commit -m "Added teset3.txt"
# 查看所有提交记录
git hist --all

合并分支

主要用于合并测试分支到主分支中,协助团队开发

1
2
3
4
# 切换分支
$ git checkout lgnew
# 合并,将 master 合并至 lgnew
$ git merge master

合并冲突

1
2
3
4
5
6
7
8
9
10
11
# 切换到新分支
git checkout lgnew
# 编辑test文件,添加一行内容 123,并提交
cat .\lab\test.txt
# 切换回主分支
git checkout master
# 编辑test文件,添加一行内容 456,并提交
cat .\lab\test.txt
# 合并会出现冲突,在打开的编辑器中,手动修改冲突,并提交
git merge lgnew

其他

1
2
#禁用路径转义显示
git config --global core.quotepath false