Git笔记(二)代码同步

本文最后更新于:8 个月前

工作区于版本库的同步操作:add、commit、checkout
版本库与remote点同步操作:push、fetch、clone
remote与工作区的同步操作:pull
git status查看修改状态

Git笔记(二)代码同步

img

一、工作区 & 版本库

1.1、add

add命令用于将「工作区」的文件修改添加到「暂存区」

1
2
3
git add [file1] [file2] [file...]	# 添加指定文件的修改到暂存区
git add dir # 添加指定目录下的文件修改到暂存区
git add . # 添加当前目录下所有修改到暂存区

1.2、commit

commit命令用于将代码修改提交到「版本库」。

1.2.1 暂存区 to 版本库

1
2
git commit -m "message"		# 提交暂存区所有的内容到版本库
git commit file1 [file2] [file...] -m "message" # 将暂存区指定文件的修改提交到版本库

1.2.2 工作区 to 版本库

1
git commit -a -m "message"		# 跳过暂存区,提交工作区所有修改到版本库

上面这条命令没有得到验证!!

1.2.3 重做commit

1
2
3
4
5
git commit --amend -m "message"	
# 将这次提交,覆盖上一次提交。如果这两次提交之间,代码没有发生变化,则仅仅改写上一次commit的注释

git commit --amend [file1] [file2] [file...]
# 用指定文件的修改进行提交,并替代上一次commit

1.3、checkout

checkout命令用于 恢复工作区文件切换分支,这里介绍的重心是前者。

1.3.1 恢复工作区

1
2
3
4
5
git checkout .	# 将暂存区的所有修改恢复到工作区,即放弃git add的内容
git checkout -- filename # 将指定文件从暂存区覆盖到工作区,用来丢弃工作区对该文件的修改
# 注意:如果文件修改后,没有git add,那么将恢复到上一次commit的状态

git checkout commitID -- filename # 从指定commit恢复指定文件,会同时改变暂存区和工作区

1.3.2 切换分支/快照/标签

1
2
3
4
5
6
7
git checkout	# 回到上一个分支
git checkout develop # 切换到指定的develop分支

git checkout commitID # 切换到指定快照

git checkout tags/1.0 # 切换到指定tag
git checkout 1.0 # 同上,但前提是没有叫1.0的分支

二、版本库 & remote

2.1、push推送

push命令用于将本地分支点更新,推送同步到远程主机上的仓库

1
git push <远程主机名> <本地分支名>:<远程分支名>

示例:

1
2
# 省略远程分支名,表示将本地分支推送给与之存在“追踪关系”的分支,如果该远程分支不存在,则会被新建
git push origin master
1
2
# 如果本地分支与远程分支存在“追踪关系”,并且只有1个追踪分支,可以不加任何参数
git push

2.1.1 指定默认主机

如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push

1
2
git push -u origin master
# 将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了

2.1.2 删除远程分支

如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支

1
2
3
git push origin :master		# 注意,远程分支前加了一个冒号
# 等价于
git push origin --delete master

2.1.3 强制推送

1
2
git push --all origin	#不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机
git push --force origin #用本地分支强制覆盖远程分支,慎用!(强制推送单个分支)

2.2、fetch下载

git fetch命令用于将某个远程主机的更新,全部取回本地,但是不影响本地代码,通常用于查看其他人的进程

1
2
3
git fetch [主机名] [分支名]
# 主机名,可选,如果本地remote只关联了一个远程主机,可以不加该参数
# 分支名,可选,缺省默认拉取所有分支

2.2.1 应用一:用远程分支创建本地分支

1
2
git fetch origin dev			# 下载指定远程分支到本地,但是不影响本地代码
git checkout -b dev origin/dev # 访问(下载到本地的)远程分支时,需要用 远程主机名/分支名 的方式读取

2.2.2 应用二:合并远程分支到本地分支

1
2
git fetch origin/dev
git merge origin/dev # 将远程分支合并到本地当前分支

2.3、clone克隆

1
2
git clone 链接 [本地目录名]
# 本地目录名,可选,缺省时,生成的文件夹默认与仓库名同名
  • clone默认只克隆master分支,即本地项目一开始只有一个master分支
  • 如果要获取其它远程分支,操作方法是:基于指定的远程分支来新建本地分支
image-20221015163940003

三、remote & 工作区

3.1、pull

git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并,作用相当于git fecch targetgit merge target

1
2
git pull <远程主机名> <远程分支名>:<本地分支名>
# 如果远程分支是与本地当前分支合并,可以省略 :<本地分支名> 参数

示例:

1
2
3
4
5
git pull origin next	#取回origin/next分支,再与当前分支合并

#相当于
git fetch origin
git merge origin/next

如果合并分支时,需要采用「rebase」模式,可以加上--rabase参数

1
git pull --rebase <远程主机名> <远程分支名>:<本地分支名>

如果远程主机删除了某个分支,默认情况下,git pull 不会在拉取远程分支的时候,删除对应的本地分支。这是为了防止,由于其他人操作了远程主机,导致git pull不知不觉删除了本地分支。

但是,你可以改变这个行为,加上参数 -p 就会在本地删除远程已经删除的分支

1
git pull -p

四、查看代码状态

代码被修改后,使用git status命令可以查看到所有被修改的文件,以及修改当前处在「工作区」还是「暂存区」

1
2
3
4
5
6
7
8
9
10
11
# 显示有变更的文件
git status

# 显示暂存区和工作区的差异
git diff

# 显示暂存区和上一个commit的差异
git diff --cached [file]

# 显示工作区与当前分支最新commit之间的差异
git diff HEAD

Git笔记(二)代码同步
http://timegogo.top/2023/02/22/Git/Git笔记(二)代码同步/
作者
丘智聪
发布于
2023年2月22日
更新于
2023年7月16日
许可协议