Git命令非常之多,本人也是经常会记混一些命令,下面总结了在日常开发中常用的一些Git命令,方便日后查看,接下来还会继续进行补充!
Git环境配置
-
设置用户名和邮箱(用户标识,必须设置)
git config --global user.name “用户名”
git config --global user.email 邮箱
-
查看Git所有配置:git config -l
-
查看Git系统配置:git config --system --list
-
查看Git全局用户配置:git config --global --list
Git基本操作
-
创建本地仓库:git init
-
查看所有文件状态:git status
-
添加所有文件到暂存区:git add .
-
提交到本地库:git commit -m “提交的信息”
-
撤销上一次提交到本地库:git commit – amend
-
查看本地库历史版本:
git log
git log --pretty=oneline
git log --oneline
-
远程库克隆到本地库:git clone 远程地址
-
将本地库推送到远程库:git push 远程库地址别名 要推送的分支
-
强制推送到远程库:git push -f 远程库地址别名 要推送的分支
-
将远程库的修改拉取到本地:git pull 远程库地址别名 拉取的分支
(pull=fetch+merge,pull实际上就是将远程分支的最新内容合并到本地分支上)
分支相关操作
- 查看分支:git branch
- 查看远程分支:git branch -r
- 查看包括远程分支在内的所有分支:git branch -a
- 新建一个分支:git branch 分支名
- 切换分支:git checkout 分支名
- 新建一个分支并同时切换到这个分支上:git checkout -b 分支名
- 删除分支:git branch -d 分支名
(强制删除分支:git branch -D 分支名) - 合并分支:git merge 被合并的分支名
(合并分支时,要先将分支切换到接收合并的分支上,例如要将master分支合并到develop分支,需要执行的操作:①git checkout develop; ②git merge master;) - 重命名本地分支
①如果对于分支不是当前分支,使用:git branch -m 原分支名 新分支名
②如果对于分支是当前分支,使用:git branch -m 新分支名称 - 重命名远程分支
①切换到需要修改的分支下:git checkout 分支名
②更新分支:git pull
(因为是先删除远程分支,再进行提交,所以最好先更新一下,免得别人提交了东西,本地的代码不是最新的)
③删除远程分支:git push --delete origin 分支名
(删除的是远程分支,但是本地的分支还在)
④修改本地分支名:git branch -m 原分支名 新分支名
⑤把本地分支提交到远程:git push origin 分支名
远程地址别名相关操作
- 查看所有远程库地址别名信息(只显示地址别名):git remote
- 查看所有远程库地址别名信息(不仅显示地址别名,还显示对应的远程地址):git remote -v
- 添加远程库地址别名:git remote add 别名 地址
- 删除远程地址别名:git remote rm 别名
代码回退操作
- 代码未提交到暂存区想要回退:“git checkout - - 文件名”或者 “git restore 文件名”
- 代码提交到暂存区想要回退(针对单个文件):“git reset HEAD 文件名”或者“git restore - - staged 文件名”,如果想要整体回退到git add之前:“git reset HEAD”
(上面的操作仅仅是回退到git add之前,如果要使得工作区的代码也回退,需要再执行一下1操作) - 代码提交到本地库想要回退:git reset --hard 局部索引值
(- -hard会重置暂存区、重置工作区)
补充:- -soft:仅仅在本地库移动HEAD指针
- -mixed:不仅在本地库移动HEAD指针,而且重置暂存区
- -hard:在本地库移动HEAD指针,而且重置暂存区、重置工作区
- 回退远程仓库版本
git reflog # 查看本地库版本
git reset --hard 版本号 # 本地库版本回退
git push -f origin 分支 # 将本地库回退后的版本强推到远程库,这时候远程库相应版本也会回退
注意:对于上面的命令,如果不记得,可以使用“git status”命令查看,会给我们相应的提示
其它命令
-
比较两次修改的差异:git diff 文件名
-
把文件在工作区的修改撤销到最近一次git add 或 git commit时的内容:git checkout – filename
-
开发分支合并最新master分支解决冲突
参考博客:https://blog.youkuaiyun.com/qq_24735877/article/details/80847372 -
开发常见操作之更新代码:通常我们是在个人分支进行代码开发,当要提交代码到远程库的时候,如果远程的master分支已经发生了改变(假设主分支是master),那么我们需要先将远程的master分支拉取下来,也就是更新我们的本地master分支,再将最新的master分支合并到个人分支,才可以进行后续的代码提交操作,具体的步骤如下:
1.git checkout master
2.git pull origin master
3.git checkout 个人分支
4.git merge master
5.git push origin 个人分支
git clone 命令
git clone 命令做了些什么呢?
- 首先,git clone 不加指定分支指的是会将远程仓库上所有分支的代码都克隆到本地来,并且默认会在本地创建一个master分支;“git clone -b 分支名”指的是会将远程仓库上某个指定分支的代码克隆到本地,并且在本地创建对应的分支。
- 再者,执行 git clone 命令还会在本地创建一个远程地址信息,地址别名为origin。
git pull 命令
对于pull命令,我们可能都知道 pull = fetch + merge;但是git pull 加上分支名与不加上分支名的区别,可能有所混淆。(我就混淆了),之前是这样的:我本地当前分支是develop,我在本地想要合并小伙伴新提交到远程上的个人分支代码,但是在本地却查看不到这个分支,通过“git branch -a”命令也没有查看到,原因就是我本地的代码不是最新的,那么我要执行哪条命令才能拉取远程仓库最新的代码,我一开始执行了“git pull origin develop”这条命令,发现并没有拉取到远程仓库上的新分支代码;接下来我又执行了“git pull”命令,就把这个远程新分支的代码拉下来了,这是何解?
git fetch(不加分支名):拉取远程仓库所有更新的代码(所有分支)到本地仓库,但不做合并操作
git fetch(加上分支名):拉取远程仓库指定分支最新的代码到本地仓库,不做合并操作
git pull(加上分支名):等同于"git fetch 分支名"+"git merge 分支名",也就是会拉取远程仓库指定分支的最新代码到本地仓库,并且将该分支的代码合并到当前分支上
git pull(不加分支名):等同于"git fetch (不加分支名)"+"git merge 当前分支",也就是会拉取远程仓库所有更新的代码到本地仓库,并且合并当前分支的远程代码
举例:
假设我本地当前所在的分支是develop
git pull origin develop:指的是只拉取远程仓库develop分支的最新代码,并将最新代码合并到本地的develop分支上
git pull origin bugfix:指的是只拉取远程仓库bugfix分支的最新代码,并将bugfix分支最新代码合并到本地的develop分支上
git pull:指的是会拉取远程仓库上所有分支的最新代码,并将develop分支的最新代码合并到本地的develop分支上
本地项目整合到github步骤
1、github上创建远程仓库,仓库名称和本地项目保持一致
2、本地项目根目录下执行:git init
命令;将该项目变成一个git项目
3、本地项目根目录下执行以下命令,和远程仓库进行关联:
git remote add origin git@github.com:git-chen513/spring_security_oauth.git
4、本地项目根目录下执行分别执行 git add
和 git commit
命令,最后执行 git push origin master
推送到远程仓库
关于代码回退
一、代码未提交到暂存区进行回退(即还没有执行 git add 命令)
通过 git restore 命令撤销变更,例如:git restore main.go
二、代码已提交到暂存区进行回退(即已经执行了 git add 命令)
先通过 git restore --staged 命令移除暂存区,例如:git restore --staged main.go
再通过 git restore 命令回退撤销变更,例如:git restore main.go
三、代码提交到本地库后进行回退(即已经执行了 git commit 命令)
git reset --hard 局部索引值
(会回退到指定索引值的commit,同时工作区、暂存区都会被清空,相当于局部索引值之后的commit记录失效,同时局部索引值之后commit产生的变更也不会重新存到工作区和暂存区)git reset --soft 局部索引值
(会回退到指定索引值的commit,但是局部索引值之后的 commit 会重新存到暂存区,相当于之前的变更记录不会消失,这种场景很适用于如果我们commit之后发现还有部分修改没有一起commit进去,就可以通过该命令暂时撤销上一次的commit,但是变更记录仍然在暂存区中)