git 体系
各区域理解
- 工作区(working directory):本地工作目录,进行代码书写和编辑的地方,例如 vscode 打开的工作目录
- 暂存区(stage area,又称索引区 index):每次执行
git add后会存储到该区域,用来与本地仓库之间做一个缓存 - 本地仓库(local repository):当执行
git commit命令后,会将暂存区内容提交到该仓库。工作区的.git 目录下的 refs/heads 目录,存储的就是本地分支的代码信息。这里可以使用git merge或git rebase将远程仓库副本合并到本地仓库 - 远程仓库副本:存储在本地的远程仓库缓存。工作区的.git 目录下的 refs/remotes 目录,存储的就是远程仓库的分支信息。如需更新,通过
git fetch或git pull实现,git fetch获取时,并未合并到本地仓库,需要通过git merge/rebase操作实现远程仓库副本和本地仓库的合并 - 远程仓库(remote repository):代码提交最终的归宿,通过 pull/push 实现本地仓库与远程仓库的交互
git stash
- 用于想要保存当前的修改,又想回到之前最后一次提交的干净的工作仓库进行操作的情况。(执行该代码后,所有 commit 代码都会从暂存的工作区移除,回到上次 commit 时的状态)例如你在修改本地代码,突然另一个分支存在问题,可以先暂存,然后修改另一个分支,最后通过 git stash pop 恢复代码,继续搬砖
git stash save xxx暂时保存没有提交的工作git stash list列出所有暂时保存的工作git stash show用于检查/校验git stash apply stash@{0}{0}获取最新存储,{1}获取次新,{2.hour.ago}获取两小时之前的git stash pop恢复最近一次 stash 文件git stash drop丢弃最近一次 stash 文件git stash drop stash@{1}丢弃某次 stash 文件git stash clear删除所有 stash
命令解析
git --version
git --version查看版本
git config
git config --global user.name 提交人姓名配置提交人信息git config --global user.email 提交人邮箱配置提交人邮箱git config --list查看 git 配置信息,或者查看 C:\Users\dell' 目录下的 .gitconfig 文件,并进行编辑保存
git clone
git clone xxx.gitclone 仓库代码到本地,默认停留在 master 分支git clone xxx.git -b branch1clone 仓库代码到本地,自动切换到 branch1 分支
git init
git init初始化 git 仓库,除了从远程仓库 clone 代码,我们也可以初始化一个 git 仓库,此时 init 的仓库无法和远程仓库进行交互
git remote
git remote add [alias] [url]添加一个远程版本库关联git remote rm [alias]删除某个远程版本库关联
比如此时有个本地初始好的仓库,和一个创建好的远程仓库,两者进行关联
git remote add origin xxx.gitgit push -u origin master
git branch
git branch查看本地所有分支信息git branch -r查看远程仓库所有分支git branch -a查看本地和远程仓库所有分支git branch 分支名称创建分支git checkout 分支名称切换分支git echeckout -b branch1以当前分支为基准,创建一个新的分支,并切换过去git merge 来源分支合并分支git branch -d 分支名称分支被合并后删除git branch -D 分支名称分支没有被合并,想要强制删除
git add
git add [file1] [file2]添加一个或多个文件到暂存区git add .把当前目录所有改动的文件都添加到暂存区git add -A把当前仓库所有改动的文件都添加到暂存区
git commit
git commit [file1] ... -m [message]将暂存区的内容提交到本地 git 仓库中 如果没有强制要求git add和git commit一定要分开,可以使用git commit -am提交,方便快捷
git push
git push推送到远程仓库git push --set-upstream origin branch1将本地刚建好的分支推送到远端并建立关联关系(如果远端存在相同分支:没有冲突,可以关联成功并提交你的改动;有冲突,提交命令报错,需要先 git pull(git pull origin branch1)同名分支代码,解决冲突,再提交)
git pull、git fetch
git fetch从远程获取最新版本到本地,不会自动合并git pull从远程获取最新版本并 merge 到本地
git status
git status查看当前文件状态
git diff
git diff查看尚未缓存的改动git diff --cached查看已缓存的改动git diff HEAD查看未缓存和已缓存的所有改动git diff --stat显示摘要而非整个 diff
git rm
如果某个需要被 git 忽略的文件不小心提交到了 git 本地仓库,需要从本地仓库中删除提交记录;如果只是简单的手动从本地工作目录中删除,执行git status时会报错
git rm 文件名称从 git 仓库中删除文件git rm -f 文件名称如果删除之前修改过,并已经提交放入缓存区,使用-f 强制删除git rm --cached 文件名称把文件从缓存区删除,仍希望文件保存在工作目录git rm -r dist从 git 仓库中删除某个目录,如果需要删除某个目录,添加上-r (递归删除,删除某个目录的所有子目录及文件)修饰就可以了
git mv
git mv test.txt newtest.txt用于移动或重命名一个文件、目录或软链接
git log
git log --oneline查看提交历史(--oneline,历史记录的简洁版本;--graph,查看历史记录中什么时候出现了分支,什么时候出现了合并;--reverse,逆向显示所有日志;--author,查找指定用户的提交日志;--since/--before/--until/--after,执行筛选日期;--no-merges,选项以隐藏)git reflog在使用 git log 查看日志找不到的情况下
git reset、git revert
-
git reset HEAD取消之前git add提交的缓存内容(HEAD,当前版本;HEAD^,上一版本;HEAD^^,上上一版本;HEAD^^^,上上上一版本;HEAD~n,撤回 n 个版本) -
git reset --soft 版本号回退版本库。撤回后所有目录都放入缓存区(发现之前的提交有错误的代码,推荐使用--soft 命令处理) -
git reset --mixed 版本号回退版本库、暂存区。撤回后所有目录都放入工作区 -
git reset --hard 版本号回退版本库、暂存区、工作区。撤回并清空工作目录及缓存区所有修改 -
git reset HEAD test.tx取消之前提交的 test.txt -
git reset回滚到对应的 commit-id,删除该 commit-id 之后的所有提交,并不会产生新的提交记录,推送到远程服务器的话,需要使用-f 强制推送 -
git revert反做撤销 commit-id,重新生成一个新的 commit-id,并不会对之前的提交记录产生影响,推送到远程服务器直接使用 git push 即可
git cherry-pick
git cherry-pick忘记切换分支,在 master 分支上改了代码,并提交到本地仓库,使用该命令执行分支的指定提交合并到当前分支
git tag
git tag v1.0.0轻量级标签git tag -a v1.0.1 -m '发布的版本1.0.1'注释标签
git merge、git rebase
-
git checkout feature,git merge master或者git merge feature master将 master 分支合并到 feature 分支中(feature 分支每次需要合并上游更改时,都将产生一个额外的合并提交,如果 master 分支操作过于频繁,会使提交的历史记录变得难以理解) -
git checkout feature,git rebase master这种方式会将整个 feature 分支移到 master 分支的顶端,与 merge 不同,rebase 通过为每个原始分支的提交创建全新的 commits 来重写项目历史记录