一. 创建版本库
版本库可以理解成一个目录,在这个目录里的所有文件都能被Git管理起来,每个文件的修改,删除都可以被Git跟综到,以便在将来在需要的时候“还原”。
- 第一步:创建一个空的目录
- 命令 :
$ mkdir "文件名“
$ cd "文件名"
$ pwd
-
详解:mkdir: 创建一个空的文件
cd:进入到创建的文件里
pwd:显示当前目录
- 第二步:把这个目录变成Git可以管理的仓库:
- 命令:
$ git init
Initialized empty Git repository in /文件地址.git/
-
详解:
git init: 初始化Git仓库,Git可以管理了
并且告诉你是一个空的仓库(empty Git repository),当前目录下多了一个.git目录,这个目录就是Git来跟踪管理版本库的,没事千万不要修改这个目录里面的文件,不然就把Git仓库给破坏了。
二. 把文件添加到版本库
- 命令
- 第一步 git add 文件名 (添加到暂存区)
- 第二步 git commit -m "说明/备注" (提交到仓库中)
-
详解
git status:可以看到暂存区的修改,有哪些没有提交到仓库中去
git diff:可以看到哪些具体的内容被修改了,顾名思义就是查看difference
二. 1 版本回退
-
命令
git log:可以查看由近到远的提交日志
git log --pretty=oneline:和git log作用一样,简化了输出内容,只有一大串的commit id(版本号)和提交时的备注
回退命令
$ git reset --hard HEAD^ // 回退到上一个版本
$ cat 文件名 // 输出当前文件内容
回退到之前未来(指定)的版本
$ git reset --hard commit id // 根据commit id回退到指定版本
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是改变了HEAD的指针指向;
然后顺便把工作区的文件更新了。所以你让HEAD指向哪个版本号,你就把当前版本定位在哪。
想回退到某一个版本,但是不知道commit id 怎么办?
有后悔药!
$ git reflog // 这个命令是用来记录每一次的命令的。
这样就可以根据commit id回到指定的版本了😸
下面直接放Git命令:
1. 设置
$ git config --global user.name "Your Name"
$ git config --global user.email "Your email"
$ cat ~/.gitconfig // 查看email和name是什么
2. 本地分支
$ git init // 初始化当前文件夹,让Git能够管理
$ git add // 添加文件到暂存区
$ git commit -m "提交信息" // 暂存区的文件提交的当前分支
$ git status // 查看状态
$ git diff // 查看修改
$ git log // 查看历史记录(窗口不关闭) 有--pretty=oneline的参数:可以只显示提交信息
$ git reset --hard HEAD^ // 回到上一个版本,也可以把暂存区的修改回退到工作区
$ git reset --hard "commit id" // 回到指定版本
$ cat "文件名" // 查看当前文件的内容
$ git reflog // 记录每一次的命令(窗口关闭也能查到)主要是查看commit id,回到某一个版本
$ git diff HEAD -- "文件名" // 查看工作区和版本库的最新区别
$ git checkout -- "文件名" // 把工作区的修改全部撤销:1.没有放到暂存区的,就撤销修改,回到和版本库一模一样。 2.添加到暂存区后的,又做了修改,那就回到添加到暂存区 之后的状态。(总之就是回到最近的一次git add 或者 git commit)。PS:如果没有--就是切换分支的命令。
$ git rm "name" // 删除一个文件
3. 远程仓库
$ ssh-keygen -t rsa -C "Your email" // 生成公钥和私钥 地址:/admin/.ssh/...
$ git remote add origin git@github.com:z-Growup977/test // 本地关联远端
$ git push -u origin master // 本地推送到远程 -u参数和推送的分支关联起来
$ git remote -v // 查看远程库信息 不带-v只显示仓库g名称
$ git remote rm origin // 删除origin(其实是解除和远程的绑定关系)
$ git clone git@github.com:z-Growup977/gitskills.git // 本地从远端克隆仓库
$ ls // 查看当前文件夹下的文件
$ git push origin <branch-name> // 推送自己本地的修改
$ git pull // 远程比本地更新,用这个命令合并
$ git branch --set-upstream-to <branch-name> origin/<branch-name> // git pull时提示 no tracking information说明没有创建连接。需用这个命令创建本地和远程的连接
$ git checkout -b <branch-name> origin/<branch-name> // 在本地创建和远程对应的分支
4. 分支管理
$ git checkout -b dev // -b 表示创建并切换到dev分支
$ git branch // 查看所有分支 *标记的是当前分支
$ git branch dev // 创建分支
$ git checout dev // 根据分支名切换分支。
$ git merge dev // dev合并到当前分支
$ git branch -d dev // 删除dev分支
$ git branch -D dev // 强制删除分支
$ -------------------------下面是新版本的切换命令switch
$ git switch -c dev // 创建并切换到dev分支
$ git switch main // 切换到main分支
$ -------------------------
$ git log --graph --pretty=oneline --abbrev-commit // 查看分支的合并情况
$ git merge --no--ff -m "描述" dev // 加上--no-ff参数能从历史中看出合并记录,本次合并会创建一个新的commit 所以带上-m说明
$ git rebase // 把本地未push的分叉提交历史整理成直线,最终结果是和merge是一样的。
$ git stash // 把当前工作现场“储藏”起来。
$ git stash list // 查看储藏起来的工作区
$ git stash pop // 恢复储藏区,并删除stash内容
$ git stash apply // 恢复储藏区但不删除,需要用:git stash drop删除
$ git stash apply stash@{0} // 恢复指定的stash
$ git cherry-pick <commit id> // 复制一个特定的提交到当前分支
5. 标签管理 tag
$ git tag <name> // 创建tag标签 默认为HEAD
$ git tag // 查看所有标签
$ git tag <name> <commit id> // 指定提交id打上标签
$ git tag -a <name> -m "shuoming" <commit id> // 创建带有说明的标签,-a指定标签名,-m 指定说明
$ git tag -d <tagname> // 删除某个本地标签
$ git push origin main --tags // 推送所有本地标签到远程仓库
$ git push origin <tagname> // 推送某个本地标签到远程
如果标签已经推送到远程删除的话就需要先删除本地标签,再删除远程:
$ git push origin :refs/tags/<tagname> // 删除某个远程标签,登录Github查看
!!注意:标签总是和某个commit id挂钩。如果这个commit id即出现在main分支,又出现在dev分支,那么这两个分支都可以看到这个标签。
6. 忽略特殊文件
就是在Git提交的时候,不想提交的文件我们可以:
- 在Git工作区的目录下创建文件: .gitignore
- 然后把想要忽略的文件名字填写到这个文件里面。
- 最后就是把.gitignore文件提交到Git
如果想要添加可以 git add -f <name> // 使用-f可以强制添加。
7. 配置别名(偷懒)
$ git config --global alias.<别名> <"原名"> // 配置别名是为了简单好记,--global是全局参数,所有Git仓库都能使用。
下面是一些常用的别名设置方法:
$ git config --global alias.st status
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
$ git config --global alias.unstage 'reset HEAD' // 把暂存区的修改撤销掉(unstage),重新放回工作区。
$ git config --global alias.last 'log -1' // 显示最后一次提交信息