一、常用命令(6个):git clone、git push、git add、git commit、git checkout、git pull
1、git init:git 上传新项目需要初始化,项目中出现如下文件夹
2、git add 文件名:工作区提交修改到暂存区
- 命令格式:
- 添加一个或多个文件到暂存区:git add [file1] [file2] ...
- 添加指定目录到暂存区,包括子目录:git add [dir]
- 添加当前目录下的所有文件到暂存区:git add .
- 使用案例:
- git add testAdd.txt add.js
3、git commit -m "备注":提交暂存区到本地仓库
- 命令格式:
- git commit -m [message] —— 提交暂存区到本地仓库([message]可以是一些备注信息)
- git commit [file1] [file2] ... -m [message] —— 提交暂存区的指定文件到仓库区
- git commit -a -m —— -a参数设置修改文件后不需要执行 git add 命令,直接来提交
- git commit -a -m [message] 等价于 git add . 再执行 git commit -m [message]
4、git status:查看仓库当前的状态,显示有变更的文件
- 使用 -s 参数来获得简短的输出结果:git status -s
5、git diff:比较文件的不同,即暂存区与工作区的差异
- git diff —— 工作区(work dict)与暂存区(stage)的比较(未缓存:未执行 git add 命令)
- git diff --cached —— 暂存区(stage)与分支(master)的比较(已缓存:已执行 git add 命令)
- git diff HEAD —— 查看已缓存的与未缓存的所有改动
- git diff --stat —— 显示摘要而非整个
- 命令格式:
- git diff [file] —— 显示暂存区与工作区的差异
- git diff --cached [file] / git diff --staged [file] —— 显示暂存区与上一次(commit)的差异
6、git show commit_id:查看某次修改
7、git log / git blame
- git log:查看历史提交记录
- git log —— 查看提交历史,看到回退到哪个版本
- 会 less 分页显示文件的内容(q —— 退出less分页)
- git log --graph —— 查看分支合并图
- git --no-pager log -3 -p —— 查看最近3个版本的修改情况
- no-pager —— 不 less 分页显示了
- 3 —— 修改3个版本
- p —— 显示修改部分
- git blame:以列表形式查看指定文件的历史修改记录
- 查看某个文件的每一行内容由谁所写:git blame 文件名
- 命令行:git blame src/components/Debugger.vue
- 如果只查文件中某一部分由谁所写:
- git blame 文件名 | grep "查找词"(grep需要安装才能使用)
- git blame 文件名 -L a,b
- -L —— 参数表示后面接的是行号(Line), a,b代表查询文件的第a行到第b行之间的文件内容情况。
- a, —— 则代表从第a行到文件结尾
- ,b —— 则代表从文件开头到第b行
- 假如我们要查Debugger.vue的第5行,命令则如下所示:
- git blame Debugger.vue | grep "Mix Asset"
- git blame Debugger.vue -L 5,5
8、git reflog:查看命令历史,看到回退到哪个版本
9、git pull (--rebase):git pull时可以加上 --rebase 参数,使之不产生 Merge 点,保证了代码的整洁。
10、git push
11、git reset --hard:回退代码。回退到某个 commit_id
- git reset --hard HEAD/HEAD^/HEAD^^/HEAD~100 —— 回退到上几个版本
- HEAD 是当前版本,HEAD^ 上个版本,HEAD^^ 上上个版本,HEAD~100 回退 100 个版本
- git reset --hard 3628164 —— 回退到指定版本号,版本号不用写全
12、git checkout 与 git 分支
- git checkout -b 分支名 —— 在本地当前分支的基础上,新建一个新分支
- git checkout -b 本地分支名 origin/远程分支名 —— 拉取远程分支去创建本地分支(git checkout -b menu origin/master)
- git 分支
- git branch —— 查看所有本地分支
- git branch -r —— 查看所有远程分支
- git branch -a —— 查看所有本地和远程分支
- git branch 分支名 —— 创建分支
- git checkout 分支名 —— 切换分支
- git checkout -b 分支名 —— 创建+切换分支
- git merge 分支名 —— 合并某分支到当前分支
- 删除分支:git branch -d 分支名
- 删除未被合并的分支:git branch -D 分支名
13、git help 与 git gui
- git help 可以查看所有 git 命令。比如查询 git branch 相关参数,执行 git help branch,然后 OPTIONS 字段就能看到所有 git branch 的所有参数及其解释。
- git gui 是 git 的图形操作界面
14、git rm —— 将文件从暂存区与工作区删除
- rm:删除工作区的文件
- 执行删除命令:rm src/components/test1.txt
- 查看状态(成功删除工作区文件):git status
- rm 命令只是删除工作区的文件,并没有删除版本库的文件,想要删除版本库文件还要执行下面的命令:
- git add .
- git commit -m "delete test1"
- git rm:删除工作区文件,并且将这次删除放入暂存区。
- 注意:要删除的文件是没有修改过的,就是说和当前版本库文件的内容相同
- 执行删除命令:git rm src/components/test2.txt
- 查看状态(成功删除了工作区文件,并且将这次删除放入暂存区)
- 然后提交:git commit -m "delete test2"
- git rm -f:删除工作区和暂存区文件,并且将这次删除放入暂存区
- 注意:要删除的文件已经修改过,就是说和当前版本库文件的内容不同
- test3.txt 文件修改过还没 git add 到暂存区 —— git rm src/components/test4.txt
- test3.txt 文件修改过已经 git add 到暂存区 —— git rm src/components/test3.txt
- 可见文件修改后不管有没有 git add 到暂存区,使用 git rm 命令删除都会报错。
- 解决方法
- 执行删除命令:git rm -f src/components/test3.txt
- 查看状态(成功删除工作区和暂存区文件,并且将这次删除放入暂存区)
- 然后提交:git commit -m "delete test3",成功删除了工作区,暂存区和版本库的文件。
- 注意:要删除的文件已经修改过,就是说和当前版本库文件的内容不同
- git rm --cached:删除暂存区文件,但保留工作区的文件,并且将这次删除放入暂存区。
- 执行删除命令:git rm --cached src/components/test4.txt
- 查看状态(成功删除暂存区文件,保留工作区文件,并且将这次删除放入暂存区,注意这里文件取消了跟踪):
15、git mv —— 移动或重命名工作区文件
- mv src/components/test4.txt src/components/new.txt —— 将 test4.txt 重命名为 new.txt
16、git remote -v —— 查看当前项目的仓库地址
17、强制推送:git push -f
二、撤销修改
1、撤销工作区修改(尚未add,尚未commit) —— git checkout -- src/components/readme.txt
2、撤销暂存区修改(已经add,尚未commit) ——— git reset HEAD src/components/readme.txt, 再 git checkout -- src/components/readme.txt
- git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
- git reset HEAD^ —— 回退所有内容到上一个版本(修改的是暂存区的代码)
- git reset HEAD^ add.txt —— 回退 add.txt 文件的版本到上一个版本
- git reset 052e —— 回退到指定版本
3、撤销版本库修改(已经commit,尚未推送到远程) ——— git reset —hard HEAD^(版本回退)
--hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交
- git reset --hard HEAD~3 ——— 回退上上上一个版本 (修改的是本地的代码)
- git reset –hard bae128 ——— 回退到某个版本回退点之前的所有信息。
- git reset --hard origin/master ——— 将本地的状态回退到和远程的一样
注意:谨慎使用 –-hard 参数,它会删除回退点之前的所有信息。
HEAD 说明:
HEAD 表示当前版本
HEAD^ 上一个版本
HEAD^^ 上上一个版本
HEAD^^^ 上上上一个版本
以此类推...
可以使用 ~数字表示
HEAD~0 表示当前版本
HEAD~1 上一个版本
HEAD^2 上上一个版本
HEAD^3 上上上一个版本
以此类推...
4、版本回退
- 分支
- 删除本地分支:git branch -d 分支名
- 删除远程分支:git push origin --delete feature-branch
- origin 是远程仓库的别名,feature-branch 是要删除的远程分支名称
- 删除本地和远程分支后,可以使用 git fetch -p 命令更新本地的远程跟踪分支列表,以确保已删除的远程分支不再显示。
- 代码回滚:git 代码库回滚,指的是将代码库某分支退回到以前的某个commit id
- 【本地代码库回滚】:
- git reset --hard commit-id :回滚到commit-id,将commit-id之后提交的commit都去除
- git reset --hard HEAD~3:将最近3次的提交回滚(HEAD~3可以改写成HEAD^^^)
- 【远程代码库回滚】:
- 应用场景:自动部署系统发布后发现问题,需要回滚到某一个commit,再重新发布
- 原理:先将本地分支退回到某个commit,删除远程分支,再重新push本地分支
- 操作步骤:
- 1、git checkout the_branch(切换到分支 the_branch)
- 2、git pull
- 3、git branch the_branch_backup(创建分支: the_branch_backup) // 备份一下这个分支当前的情况
- 4、git reset --hard the_commit_id // 把the_branch本地回滚到the_commit_id
- 5、git push origin :the_branch // 删除远程 the_branch
- 6、git push origin the_branch // 用回滚后的本地分支重新建立远程分支
- 7、git push origin :the_branch_backup // 如果前面都成功了,删除这个备份分支
- 【本地代码库回滚】: