文章

git常用命令

Git 全局设置

1
2
git config --global user.name "FengShao" # 可用中文,更直观
git config --global user.email "abc@xxx.com"

常用命令

拉取仓库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
git clone <仓库地址> <本地路径>
# 不带<本地路径>,默认创建名称为 仓库名 的文件夹, 且文件夹内容必须为空

eg:
# 拉取仓库 grit 到本地目录
git clone git@abc.com:abc/grit.git
或者
git clone git@abc.com:abc/grit.git abc

# 指定 分支 拉取仓库
git clone -b <分支名> <仓库地址> <本地路径> 

eg:
# 拉取 grit 仓库中, test-branch 分支下的内容
git clone -b test-branch git@abc.com:abc/grit.git

git创建新分支

1
2
3
4
5
6
7
8
9
10
11
# 创建新分支
git branch new-branch-name

# 切换到新分支
git checkout new-branch-name

#将创建和切换到新分支的步骤合二为一
git checkout -b new-branch-name

# 推送到远端
git push origin new-branch-name

提交修改或新增文件

1
2
3
4
5
6
7
8
9
10
11
12
# 1. 添加所有变更的文件,包括修改、新增的
git add .

# 2. 添加指定文件
git add </path/文件名>

#===将内容提交至远端===#
# 1. 添加完成之后提交
git commit -m "<备注信息>"

# 2. 推送提交的内容
git push

git合并分支

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# ================================================#
# 目标:将 dev 分支合并到 master 分支
# 正常情况下
# ================================================#
## 1. 获取远程仓库的最新更改
git fetch
# 或者
git pull origin master

## 2. 切换到分支 master
git checkout master

## 3. 将dev 合并到 master
git merge dev

## 4. 推送
git push


# ==============================================================#
# 目标: 要将 master 分支合并到名为 my-feature-branch 的分支
# 遇到冲突
# ==============================================================#
## 1. 获取远程仓库的最新更改
git fetch
# 或者
git pull origin master

## 2. 请切换到分支 my-feature-branch
git checkout my-feature-branch

## 3. 将 master 分支合并到当前检出的目标分支 my-feature-branch
git merge master

## 4. 有冲突,需要手动解决这些冲突,然后提交合并更改
git add <冲突文件>
git push

回退未Add的文件

1
git checkout 文件名

回退已add的文件

1
2
3
git reset HEAD 文件名

文件名不加的话 回退所有的 add

撤销commit

1
2
3
4
5
6
7
8
9
10
11
#撤回commit操作,您写的代码仍然保留
git reset --soft HEAD^

#回退到指定commit,该commit之后的提交内容,保留工作目录,并把重置 HEAD 所带来的新的差异放进暂存区
git reset --soft 提交号 

#回退到指定commit,该commit之后的提交内容,工作区和暂存区的内容都被抹掉
git reset --hard

#不带参数,或带参数–mixed(默认参数),与git reset --soft 不同,它将会把差异放到工作区
git reset 或 git reset --mixed

本地与远端文件的对比

1
git diff --stat

丢弃本地所有修改内容

1
git reset --hard HEAD

丢弃已经add进入缓存区的数据文件

1
git reset [file_path]

把没有提交的修改暂存到stash里面

1
2
3
4
5
# 所有修改,但是没有提交的内容
git stash
git stash pop

# 注: 不包括新增的文件

返回到某个节点

1
git clean -df 未跟踪文件的删除

删除文件

git clean: 删除的是未跟踪的文件

1
2
3
4
5
6
-n 不实际删除,只是进行演练,展示将要进行的操作,有哪些文件将要被删除。
    (可先使用该命令参数,然后再决定是否执行)
-f 删除文件
-i 显示将要删除的文件
-d 递归删除目录及文件(未跟踪的)
-q 仅显示错误,成功删除的文件不显示

git reset: 删除的是已跟踪的文件,将已commit的回退

1
2
3
git reset --hard HASH   不保留修改,已有的改动会丢失
git reset --soft HASH   保留修改,已有的改动会保留,
						在未提交中,git status或git diff可看

也可以使用以下命令删除当前修改的文件:

1
2
git clean -nxdf(查看要删除的文件及目录,确认无误后再使用下面的命令进行删除)  
git checkout . && git clean -xdf

修改提交内容

1
2
3
4
5
6
7
8
9
10
11
git commit --amend -m "新的提交消息"

# 执行过程包括:
## 1. 取消之前的提交: 
git reset HEAD~

## 对文件进行更改并重新添加到暂存区: 
git add <修改的文件>

## 重新提交: 
git commit -c ORIG_HEAD

取消当前的合并操作并丢弃所有的合并结果,回到合并之前的状态

1
git merge --abort

特殊使用

获取当前改动的所有提交

1
2
3
4
5
6
7
8
9
10
11
12
13
14
git log ${oldrev}..${newrev} --pretty=format:"%s" --merges

-   %s:提交的摘要(即提交信息的第一行)
-   %b:提交的完整信息
-   %h:提交的哈希值
-   %H:提交的完整哈希值
-   %an:提交者的名字
-   %ae:提交者的电子邮件地址
-   %ad:提交日期
-   %ar:相对提交日期
-   %cn:提交者的名字(用于合并提交)
-   %ce:提交者的电子邮件地址(用于合并提交)
-   %cd:提交日期(用于合并提交)
-   %cr:相对提交日期(用于合并提交)

多个提交重新修改

1
2
3
4
5
6
7
8
9
10
11
12
# 进入交互式文件,将 pick 修改为 edit,退出(不要修改其他东西)
git rebase -i <commit_id>

# 默认进入 刚刚修改为edit的提交内容,修改,退出
git commit --amend

# 如果有多个提交,会自动进入下一个,如果没有 会提示成功
git rebase --continue
Successfully rebased and updated refs/heads/master.

#可以提交了
git push

集成命令

创建一个新仓库

1
2
3
4
5
6
7
git clone git@abc.fscloude.cn:abc/test.git
cd test
git switch -c master
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 --initial-branch=master
git remote add origin git@abc.fscloude.cn:abc/test.git
git add .
git commit -m "Initial commit"
git push -u origin master

推送现有的 Git 仓库

1
2
3
4
5
cd existing_repo
git remote rename origin old-origin
git remote add origin git@abc.fscloude.cn:abc/test.git
git push -u origin --all
git push -u origin --tags
本文由作者按照 CC BY 4.0 进行授权