工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
如下图,NFT文件就是工作区,.git文件就是版本库
git add .
这行命令就是把工作区(NFT文件)的修改保存到版本库(.git文件)的暂存区(stage)
git commit -m "修改"
这行命令就是把暂存区(stage)的所有内容提交到当前分支(如图,当前是master分支)
git checkout -- file可以丢弃工作区的修改,其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
例如:git checkout -- readme.txt
当你不小心将错误的代码git add到暂存区,该怎么办?
git reset HEAD 可以把暂存区的修改撤销掉,重新放回工作区
例如:git reset HEAD readme.txt
当你不小心将错误的代码git commit到当前分支,该怎么办?
此时需要版本回退
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
git reset --hard HEAD^
这行命令就是回退到上一个版本
git reset --hard e475a
(注意回退后要推送代码:git push -f origin 当前分支名)
这行命令就是回退到指定版本e475a
当你不小心从版本1094a回退到版本e475a后,现在又想回到版本1094a,该怎么办?
Git提供了一个命令git reflog用来记录你的每一次命令(如下图),查找到1094a
git reset --hard 1094a
这就又回到了版本1094a
如果只有本地创建了一个Git仓库,现在想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,该怎么办?
git remote add origin [email protected]:michaelliao/learngit.git
将本地仓库和远程仓库关联起来
git push -u origin 分支名
把本地库的所有内容推送到远程库上
想从远程仓库里拉取指定分支,该怎么办?
git clone -b 分支名字 git链接
创建并切换分支
git switch -c dev //表示创建并切换
git checkout -b dev //表示创建并切换
git branch dev //创建分支
git checkout dev //切换分支,等同于git switch dev
git branch命令查看当前分支
git branch //git branch命令会列出所有分支,当前分支前面会标一个*号
删除dev分支
git branch -d dev
git branch -D dev //强行删除
当你正在dev分支上开发时,接到一个紧急bug要改,如何在不提交dev的前提下,修改master分支的bug?
思路:
git stash //先把dev的修改“储藏”起来;
再切到master分支创建一个feature_bug01分支;在feature_bug01分支修改bug后,在将feature_bug01合并到master;
git stash pop //再返回dev分支恢复之前“储藏”起来的代码
方法一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;另一种方式是用git stash pop,恢复的同时把stash内容也删了
注意:你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:git stash apply stash@{0}
当你把feature_bug01合并到master分支后,突然想起dev上也有同样的bug,但是此时feature_bug01已被删除,如何只把master上feature_bug01所做的修改“复制”到dev分支?
git cherry-pick 4c805e2 //4c805e2是feature_bug01提交时的commit
查看远程库的信息
git remote
git remote -v //显示更详细的信息
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令:
git branch --set-upstream-to origin/
git branch --set-upstream-to origin/dev dev
首先,切换到需要打标签的分支上
git tag v1.0 //打一个新标签
git tag //查看所有标签
给以前提交的commit打标签
git log --pretty=oneline --abbrev-commit //查看历史提交的commit id
git tag v0.9 f52c633 //对应的commit id是f52c633,打上 v0.9 标签
git tag -a v0.9 -m "版本0.9" f52c633 //可以创建带有说明的标签,用-a指定标签名,-m指定说明文字
如果标签打错了,也可以删除
git tag -d v0.1
git push origin v1.0 //推送某个标签到远程
git push origin --tags //一次性推送全部本地标签到远程
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除,再从远程删除
git tag -d v0.9 //从本地删除
git push origin :refs/tags/v0.9 //从远程删除