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
进行授权