0%

Git常用操作

本地操作

创建仓库

1
git init <初始化路径>

git init <初始化路径>用于初始化本地仓库,使用后对应目录下的文件全部变为untracked状态。

提交修改

1
2
3
git add <目标文件或目录>

git commit

git add <目标文件或目录>untrackedmodified状态的文件加入暂存区且将状态转为staged

git commit将读取暂存区的文件,并生成对应快照挂载到快照树中,同时移动头指针指向新提交的快照。之后所有处于staged的文件全部转换为unmodify状态。

分支的创建与选择

1
2
3
4
5
6
7
8
# 创建并转到目标分支
git checkout -b <分支名>

# 创建目标分支
git branch <分支名>

# 转到目标分支
git checkout <分支名>

合并分支和解决冲突

1
2
3
4
5
6
7
8
9
# 合并当前分支和目标分支,可能会因为发生冲突而没有完成合并。之后需要手动将解决冲突
git merge <分支名>

# 解决了冲突文件后需要将修改提交到缓存区
git add <冲突文件名>

# 解决冲突后继续进行合并g

it merge --continue

回退版本

1
2
git reset [--soft | --mixed | --hard] [<目标版本>]
git reset [--soft | --mixed | --hard] [<目标版本>] [<目标文件列表>]

git reset用于进行版本回退,在未带任何参数的情况下默认回退到最新一次提交,相当于丢弃工作区的修改。

git reset存在三种标志,若省略则默认为--mixed,其各个标志的作用如下:

  • --soft:只会移动头指针,不会修改工作区和暂存区内容。

  • --mixed:移动头指针并重置暂存区为目标提交的内容,不会修改工作区修改。

  • --hard移动头指针并重置暂存区和工作区为目标提交的内容,注意这会丢失工作区修改!

<目标版本>有多种格式,若省略则默认为HEAD

  • HEAD是一个预设标志,代表当前头指针指向的版本,用于实现相对位置定位:

    • HEAD^HEAD对应版本的上一个版本,^符号可以多次重复,如HEAD^^代表HEAD的上两个版本,以此类推。

    • HEAD~1HEAD对应版本的上一个版本,~符号后的数字可以自行指定,如HEAD~2代表HEAD对应版本的上两个版本,以此类推。

  • <目标版本>也可是是对应版本的版本号,这将会直接转到对应版本,这不仅可以进行版本的回退,也可以用于恢复到当前版本的后几个版本或其他分支。

  • <目标版本>还可以是远程分支,这相当于回退到该远程分支对应的版本。

<目标文件列表>是需要回退版本的文件,通常情况下不会显示指定,也就是回退整个项目。

文件控制

1
2
git rm
git mv

因为Git不会自行跟踪文件的删除情况,因此仅在工作区删除文件时Git并不会自动的在项目中删除对应的文件,这时需要使用git rmgit mv显示指定对文件的删除和移动操作。

默认情况下,git rmgit mv会与rmmv一样直接删除或移动工作区的文件,如果只希望结束对目标文件的追踪而不会修改对应的工作区文件,需要添加--cached标志。

文件状态与文件修改查询

1
2
git status
git diff

git status用于显示上次提交后整个项目中各个被修改的文件对应的状态。

git diff获得两个版本间的文件差异。主要使用方式如下:

  • git diff:比较当前工作区和暂存区的区别。

  • git diff --cached:比较暂存区和HEAD指向版本的区别。

  • git diff <branch0> <branch1>:比较<branch0><branch1>两个版本间的区别。

查看日志

1
2
git log
git reflog

git log打印当前HEAD指针指向的节点向分支树根部的路径上的全部节点的信息,包括节点哈希值标识、注释等。注意,在移动头指针后将会改变其打印出的的节点信息。

git reflog打印出ref log,其记录了Git仓库中HEAD指针引用的变化,其基本上包含全部的提交信息。

Git远程常用操作

下载远程仓库

1
2
# 从URL下载并添加远程仓库
git clone <仓库url>

远程仓库配置

1
2
3
4
5
6
7
8
9
10
11
# 显示远程仓库信息
git remote -v

# 添加仓库
git remote add <仓库名> <仓库url>

# 移除仓库
git remote remove <仓库名>

# 重设仓库url
git remote set-url <仓库名> <仓库url>

推送代码

1
2
3
4
5
6
7
8
# 推送本地的分支版本上传到远程并合并,若在当前分支下工作可省略<本地分支名>
git push <远程主机名> <本地分支名>:<远程分支名>

# 本地版本与远程版本有差异时徐娅强制推送,若在当前分支下工作可省略<本地分支名>
git push --force <远程主机名> <本地分支名>:<远程分支名>

# 删除<远程分支>
git push <远程主机名> --delete <远程分支名>

拉取代码

1
2
3
4
5
# 拉取远程仓库代码
git fetch <远程主机名>

# 拉取远程仓库代码并与指定分支进行合并
git pull [远程仓库名] [分支名]

将本地分支和远程分支关联

1
2
# 将远程分支和本地分支关联
git branch -u <远程分支> <本地分支>