一. 了解 Git 的背景
在说 Git 的提交与下载之前,我们先了解下版本控制管理系统,可以先看看以下博客的讲解。
Git、GitHub、GitLab三者之间的联系以及区别
Git 系统文件的传递流程图
二. Git 的常用命令介绍
Git 常用命令速查
- Git 基本分支介绍
master 分支:一般就是要上线的代码所在的分支,也就是最新最正式的分支,Git 默认会建立master分支。
develop 分支:一般用于我们开发的分支,基于 master 分支建立的。
myBranch 分支:自己本地开发的分支,基于 develop 分支建立的。 - 与分支有关的常用命令:
创建分支:git branch branch_name
删除分支:git branch -d branch_name
查看本地分支:git branch
查看远程分支: git branch -r
查看所有分支: git branch -a
以上查看分支命令会列出所有分支,当前分支前面会标一个✳号
切换分支:git checkout branch_name 或者 git switch branch_name
创建并切换到新创建分支:git checkout -b branch name 或者 git switch -c branch name
合并某分支到当前分支:git merge branch_name - git 分支的的追踪关系
在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支建立追踪关系,也就是说,本地的master分支自动”追踪”origin/master分支。
Git 也允许手动建立追踪关系。
git branch --set-upstream master origin/next
上面命令指定本地仓库 master 分支追踪 远程origin/next 分支。
如果当前分支与远程分支存在追踪关系,就可以省略分支名。
例如:git pull origin 就是把与本地当前分支同名的远程分支,与本地当前分支合并 - 与仓库有关的常用命令
4.1 新建仓库:
4.1.1 远程仓库创建:
也是在某个文件夹下面创建远程 git 仓库,如果远程服务器已安装设置过,可忽略下面两步
Linux 安装 Git apt-get install git
设置git用户名密码
git config --global --globsl user.name ‘your name’
git config --global --globsl user.email ‘your email’
开始创建仓库
mkdir project.git
cd project.git
git --bare init
4.1.2 本地仓库创建:
先在本地创建一个文件夹,然后 git init 就把这个文件夹初始化为 Git 的仓库,Git 网站也可以直接创建
touch test.txt //touch filename 创建新的空文件
git add .
git commit -m ‘frist commit’
git remote add origin test@1806.cksoft.win:/home/test/project.git
git push origin master
4.2 Git 的三种远程仓库切换方式:
参考以下博客:git 切换远程仓库的地址
4.2.1 直接修改远程仓库地址:
git remote set-url origin url
4.2.2 删除本地远程仓库地址,然后添加新的仓库地址:
git remote rm origin
git remote add origin url
4.2.3 每个仓库在初始化时,都会有一个 .git 的隐藏目录,修改其中的 config 文件中的 url
通过上边修改配置文件,我们知道可以从配置文件中查看远程仓库的地址,同时我们也可以用下边的命令来查看
-
提交代码和推送代码
5.1 添加修改代码到 git 本地仓库暂存区: git add filepath+filename
强制添加工作区文件到缓存区:git add -f filepath+filename
添加所有代码到git 本地仓库暂存区: git add .
或者 git . 添加全部项目到本地暂存区
暂存区提交代码到本地仓库: git commit -m "提交注释“
注释一般要有意义,便于以后历史回溯 ,我遇到过的 bug-fix-project_name-bug_id or feature-project_name-feature_id.
5.2 git push 命令详解
git push <远程主机名> <本地分支名>:<远程分支名>
示例:git push origin master
上面命令表示,将本地的 master 分支推送到 origin 主机的 master 分支。
如果后者不存在,则会被新建。
5.3 以下操作慎用,删除远程仓库的分支
git push origin :master 相当于
git push origin --delete master
上面命令表示删除origin主机的master分支。
5.4 如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。
git push origin //将当前分支推送到origin主机的对应分支
如果当前分支只有一个追踪分支,那么主机名都可以省略。
git push //
设定远程分支名:如果当前分支与多个主机存在追踪关系,则可以使用 -u 选项指定一个默认主机,这样后面就可以不加任何参数使用 git push。
git push -u origin master
上面命令表示将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。 -
git fetch 用法
git fetch 命令:
git fetch <远程主机名> //这个命令将某个远程主机的更新全部取回本地
如果只想取回特定分支的更新,可以指定分支名:
git fetch <远程主机名> <分支名> //注意之间有空格 -
git pull 用法(实际上执行的是 git fecth 与git merge)
git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。它的完整格式稍稍有点复杂。
git pull <远程主机名> <远程分支名>:<本地分支名>
git pull origin develop 取回远程 origin 主机的 develop分支,再与当前分支进行合并 -
git remote 命令详解
git remote 不带参数 查看远程主机名
zh@LAPTOP-HH7QQ562 MINGW64 /c/MyFloder/rpa1/rpa (master)
$ git remote 查看远程机器名 git remote show
origin
git remote -v 查看远程仓库地址
$ git remote -v
origin http://117.22.255.130:10000/rpademo/rpa.git (fetch)
origin http://117.22.255.130:10000/rpademo/rpa.git (push)
git remote add url 添加远程仓库地址
git remote rm origin 删除本地配置的远程仓库地址
git remote set-url origin url 设置本地的远程仓库地址
- git status 与 git diff 用法:
9.1 可以查看暂存区与已修改未提交到本地仓库的文件。
9.2 可以查看本地工作目录已经更改,但是还未放到暂存区的文件。
9.3 查看未被git 追踪的文件。
9.4 git diff 文件名 查看某个文件的工作区和暂存区的更改内容 - git stash
保存当前的工作区与暂存区的状态,可以使用多次,每一次后面都会增加版本号。
git stash pop 将最后一次保存的临时工作空间的文件拉下来
git stash list 查看所有的临时空间的文件
git stash clear 清空 stash 空间的文件 - git config --list 显示 .git 文件信息,也就是显示git的所有配置信息
- git log 用法
12.1 退出 git log: 英文状态下 Q,大小写都可以
12.2 git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
12.3 git log 查看提交的信息,但是不包括
12.4 git shortlog 查看提交的信息,短格式输出,喜欢用这个
12.5 git shortlog --author=“username” 显示某个人的提交
还有很多高级命令请参考以下博客:git log 高级命令 - 如何恢复git代码到历史版本
13.1 git reset --hard origin/master 回复远程仓库master分支代码覆盖本地工作区,暂存区,本地仓库
git reset --soft 版本库ID //仅仅只是撤销已提交的版本库,不会修改暂存区和工作区
git reset --hard 版本库ID //彻底将工作区、暂存区和版本库记录恢复到指定的版本库
git reset --mixed 版本库ID //仅仅只是撤销已提交的版本库和暂存区,不会修改工作区
使用命令 git reset HEAD filepath+filename 撤销commit的代码
关于 Git 的代码回滚,请参考下面的博客:git 回滚代码
13.2 本地工作区代码修改后,但是还没有add到暂存区,使用 git checkout . 让暂存区覆盖本地代码
13.3 git revert 和 git reset 回滚代码的区别
git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。
删除暂存区指定文件 git rm --cache 文件名
删除暂存区和工作区的文件 git rm -f 文件名