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
39
40
41
42
43
44
45
46
git config --global user.email "your email"

git config --global user.name "your name"

git config --global user.password "your password"

git config user.name 查看用户名

git config core.ignorecase false 设置忽略大小写为false

git config --global core.quotepath false 设置支持中文

git config --global core.autocrlf false 忽略自动处理回车换行

git默认会根据你使用的平台来处理回车换行
比如如果你在window开发,那么在你提交代码的时候,会自动把换行符改成回车换行。在你pull代码,也会自动把代码中的换行符变成回车换行符
如果你是mac os或者linux系统也是同理。他会自动处理。
正常情况下其实我任务无需修改。除非你能够确定你的项目没有杂用的情况。某个两个开发人员的代码看着会不一样。

# 设置ss 当然这里 可以只对github使用代理
git config --global http.proxy 'socks5://127.0.0.1:1086'

git config --global https.proxy 'socks5://127.0.0.1:1086'

git config --global http.https://github.com.proxy socks5://127.0.0.1:1086

git config --global https.https://github.com.proxy socks5://127.0.0.1:1086

# 设置代理
git config --global https.proxy http://127.0.0.1:1080

git config --global https.proxy https://127.0.0.1:1080

# 取消代理
git config --global --unset http.proxy

git config --global --unset https.proxy

//查看仓库级的 config
git config –-local -l
//查看全局级的 config
git config –-global -l
//查看系统级的 config
git config –-system -l
//查看当前生效的配置
git config -l

git clone

1
git clone [github地址]

从远程仓库克隆一个版本库到本地

1
2
3
4
5
6
7
8
# 默认在当前目录下创建和版本库名相同的文件夹并下载版本到该文件夹下
git clone <远程仓库的网址>

# 指定本地仓库的目录
git clone <远程仓库的网址> <本地目录>

# -b 指定要克隆的分支,默认是master分支
git clone <远程仓库的网址> -b <分支名称> <本地目录>

git init

将文件夹加入git管理。文件夹会生成一个.git目录

git status

查看本地仓库的状态。

git status -s可查看简化的git目录

git add

将文件添加到寄存区

1
2
3
4
5
6
7
8
9
10
# 把指定的文件添加到暂存区中
git add <文件路径>

# 添加所有修改、已删除的文件到暂存区中
git add -u [<文件路径>]
git add -a [<文件路径>] 对新增目录也处理

# 查看所有修改、已删除但没有提交的文件,进入一个子命令系统
git add -i [<文件路径>]
git add --interactive [<文件路径>]

git commit

将暂存区中的文件提交到本地仓库中

1
2
3
4
5
6
7
8
9
# 把暂存区中的文件提交到本地仓库中并添加描述信息
git commit -m "<提交的描述信息>"

# 把所有修改、已删除的文件提交到本地仓库中
# 不包括未被版本库跟踪的文件,等同于先调用了 "git add -u"
git commit -a -m "<提交的描述信息>"

# 修改上次提交的描述信息
git commit --amend

git remote 操作远程库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 列出已经存在的远程仓库
git remote

# 列出远程仓库的详细信息,在别名后面列出URL地址
git remote -v
git remote --verbose

# 添加远程仓库
git remote add <远程仓库的别名> <远程仓库的URL地址>

# 修改远程仓库的别名
git remote rename <原远程仓库的别名> <新的别名>

# 删除指定名称的远程仓库
git remote remove <远程仓库的别名>

# 修改远程仓库的 URL 地址
git remote set-url <远程仓库的别名> <新的远程仓库URL地址>

git branch 操作 Git 的分支命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 列出本地的所有分支,当前所在分支以 "*" 标出
git branch

# 列出本地的所有分支并显示最后一次提交,当前所在分支以 "*" 标出
git branch -v

# 创建新分支,新的分支基于上一次提交建立
git branch <分支名>

# 修改分支名称
# 如果不指定原分支名称则为当前所在分支
git branch -m [<原分支名称>] <新的分支名称>
# 强制修改分支名称
git branch -M [<原分支名称>] <新的分支名称>

# 删除指定的本地分支
git branch -d <分支名称>

# 强制删除指定的本地分支
git branch -D <分支名称>

git checkout 检出命令,用于创建、切换分支等

1
2
3
4
5
6
7
8
9
10
11
12
# 切换到已存在的指定分支
git checkout <分支名称>

# 创建并切换到指定的分支,保留所有的提交记录
# 等同于 "git branch" 和 "git checkout" 两个命令合并
git checkout -b <分支名称>

# 创建并切换到指定的分支,删除所有的提交记录
git checkout --orphan <分支名称>

# 替换掉本地的改动,新增的文件和已经添加到暂存区的内容不受影响
git checkout <文件路径>

git cherry-pick

1
2
# 把已经提交的记录合并到当前分支
git cherry-pick <commit ID>

git fetch 从远程仓库获取最新的版本到本地的 tmp 分支上

1
2
3
4
5
# 将远程仓库所有分支的最新版本全部取回到本地
git fetch <远程仓库的别名>

# 将远程仓库指定分支的最新版本取回到本地
git fetch <远程主机名> <分支名>

git merge 合并分支

1
2
# 把指定的分支合并到当前所在的分支下
git merge <分支名称>

git diff 比较版本之间的差异

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 比较当前文件和暂存区中文件的差异,显示没有暂存起来的更改
git diff

# 比较暂存区中的文件和上次提交时的差异
git diff --cached
git diff --staged

# 比较当前文件和上次提交时的差异
git diff HEAD

# 查看从指定的版本之后改动的内容
git diff <commit ID>

# 比较两个分支之间的差异
git diff <分支名称> <分支名称>

# 查看两个分支分开后各自的改动内容
git diff <分支名称>...<分支名称>

git pull

从远程仓库获取最新版本并合并到本地。
首先会执行 git fetch,然后执行 git merge,把获取的分支的 HEAD 合并到当前分支。

git push

把本地仓库的提交推送到远程仓库

1
2
3
4
5
6
7
8
# 把本地仓库的分支推送到远程仓库的指定分支
git push <远程仓库的别名> <本地分支名>:<远程分支名>
git push -u origin master
# -u 会设置默认push数据

# 删除指定的远程仓库的分支
git push <远程仓库的别名> :<远程分支名>
git push <远程仓库的别名> --delete <远程分支名>

git log 显示提交的记录

1
2
3
4
5
6
7
8
# 打印所有的提交记录
git log

# 打印从第一次提交到指定的提交的记录
git log <commit ID>

# 打印指定数量的最新提交的记录
git log -<指定的数量>

git reset 还原提交记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 重置暂存区,但文件不受影响
# 相当于将用 "git add" 命令更新到暂存区的内容撤出暂存区,可以指定文件
# 没有指定 commit ID 则默认为当前 HEAD
git reset [<文件路径>]
git reset --mixed [<文件路径>]

# 将 HEAD 的指向改变,撤销到指定的提交记录,文件未修改
git reset <commit ID>
git reset --mixed <commit ID>

# 将 HEAD 的指向改变,撤销到指定的提交记录,文件未修改
# 相当于调用 "git reset --mixed" 命令后又做了一次 "git add"
git reset --soft <commit ID>

# 将 HEAD 的指向改变,撤销到指定的提交记录,文件也修改了
git reset --hard <commit ID>

git revert

生成一个新的提交来撤销某次提交,此次提交之前的所有提交都会被保留

1
2
# 生成一个新的提交来撤销某次提交
git revert <commit ID>

git tag

操作标签的命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 打印所有的标签
git tag

# 添加轻量标签,指向提交对象的引用,可以指定之前的提交记录
git tag <标签名称> [<commit ID>]

# 添加带有描述信息的附注标签,可以指定之前的提交记录
git tag -a <标签名称> -m <标签描述信息> [<commit ID>]

# 切换到指定的标签
git checkout <标签名称>

# 查看标签的信息
git show <标签名称>

# 删除指定的标签
git tag -d <标签名称>

# 将指定的标签提交到远程仓库
git push <远程仓库的别名> <标签名称>

# 将本地所有的标签全部提交到远程仓库
git push <远程仓库的别名> –tags

git mv

重命名文件或者文件夹

1
2
# 重命名指定的文件或者文件夹
git mv <源文件/文件夹> <目标文件/文件夹>

git rm

删除文件或者文件夹

1
2
3
4
5
6
7
8
# 移除跟踪指定的文件,并从本地仓库的文件夹中删除
git rm <文件路径>

# 移除跟踪指定的文件夹,并从本地仓库的文件夹中删除
git rm -r <文件夹路径>

# 移除跟踪指定的文件,在本地仓库的文件夹中保留该文件
git rm --cached

实际操作场景

1. 删除掉本地不存在的远程分支

多人合作开发时,如果远程的分支被其他开发删除掉,在本地执行 git branch –all 依然会显示该远程分支,可使用下列的命令进行删除:

1
2
3
4
5
6
# 使用 pull 命令,添加 -p 参数
git pull -p

# 等同于下面的命令
git fetch -p
git fetch --prune origin

参考地址 可在此查看所有命令 官网

2. 将两个独立的git合并

有一次我将本地的.git 删了之后。 在使用remote建立关联只会。 push会提示要我先pull。然而pull时会报错!

1
2
3
4
git pull origin master
From https://github.com/dute7liang/document
* branch master -> FETCH_HEAD
fatal: refusing to merge unrelated histories

表示两个是独立的git。处理方式可以添加--allow-unrelated-histories即可
git pull origin master --allow-unrelated-histories执行以下命令即可正常操作!

推荐阅读

猴子都能懂的GIT入门