赞
踩
版本管理是一种记录文件变化的方式,以便将来查阅特定版本的文件内容。
Git是一个版本管理控制系统(缩写VCS),它可以在任何时间点,将文档的状态作为更新记录保存起来,也可以在任何时间点,将更新记录恢复。
官网下载即可-默认安装即可-安装后鼠标右键(默认使用比较多的是Git Bash Here)
在使用git前,需要告诉git你是谁,在向git仓库中提交时需要用到。
1、git add .:会监视工作区的状态树,使用它会把工作的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。
2、git add -u:仅监控已经被add的文件(即track file),会将修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)
3、git add -A: 是上面两个功能的集合(git add --all的缩写)
总结:
git add -A: 提交所有的变化;
git add -u: 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new);
git add .: 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件。
为了便于理解,大家暂时可以认为分支就是当前工作目录中代码的一份副本。使用分支,可以让我们从开发主线上分离出来,以免影响开发主线。
在git中,可以暂时提取该分支上所有的改动并储存,让开发人员得到一个干净的工作副本,临时转向其它工作。
使用场景:分支临时切换:
git checkeout master
git checkout --path '分支名称' '要合并的文件路径(文件在电脑中的全部路径)'
git add -A ''
git commit -m ''
git push
// 如果不想合并只是测试一定要回滚回来
git reset --hard origin/master 到上一个版本
git fetch 命令和可选项
git pull = git fetch+ git merge
// 1、fetch仓库中所有的分支。同时也会下载指定远端的所有commits和文件
git fetch <remote>
// 2、与上面命令相同,但是会fetch指定分支
git fetch <remote> <branch>
// 3、fetch所有已经注册过的远端仓库的全部分支
git fetch --all
// 4、--dry-run选项会执行fetch命令的演练,执行该命令的输出与执行正常fetch命令一致,但不会在本地应用这些更改。
git fetch --dry-run
// 5、确定没有问题之后,使用git merge origin/main合并远端变更
git merge origin/main
// 到此为止,origin/main分支和本地main分支都指向同一次commit,本地分支与远端分支同步完成。
git分为三部分workspace、index、repository;
git fetch命令总结
在切换分支时或者在开发过程要临时修改bug,为防止冲突或使工作区干净可使用此命令。
根据一个文件是否已加入版本控制,可以把文件状态分为:Tracked(已跟踪)和Untracked(未跟踪),而tracked(已跟踪)又包括三种工作状态:Unmodified,Modified,Staged
git clone url 克隆远程版本库 // 克隆远程版本库到本地
git checkout -b dev // 创建开发分支dev,并切换到该分支下
git add . // 添加当前目录的所有文件到暂存区git add [dir] 添加指定目录到暂存区,包括子目录git add [file1] 添加指定文件到暂存区
git commit -m [message] // 提交暂存区到仓库区,message为说明信息git commit [file1] -m [message] 提交暂存区的指定文件到本地仓库git commit --amend -m [message] 使用一次新的commit,替代上一次提交
git status // 查看当前工作区暂存区变动git status -s 查看当前工作区暂存区变动,概要信息git status --show-stash 查询工作区中是否有stash(暂存的文件)
git log 查看提交历史git log --oneline 以精简模式显示查看提交历史git log -p <file> 查看指定文件的提交历史git blame <file> 一列表方式查看指定文件的提交历史
git diff 显示暂存区和工作区的差异git diff filepath filepath路径文件中,工作区与暂存区的比较差异git diff HEAD filepath 工作区与HEAD ( 当前工作分支)的比较差异git diff branchName filepath 当前分支的文件与branchName分支的文件的比较差异git diff commitId filepath 与某一次提交的比较差异
git pull 拉取远程仓库所有分支更新并合并到本地分支。git pull origin master 将远程master分支合并到当前本地分支git pull origin master:master 将远程master分支合并到当前本地master分支,冒号后面表示本地分支
git fetch --all 拉取所有远端的最新代码git fetch origin master 拉取远程最新master分支代码
git push origin master 将本地分支的更新全部推送到远程仓库master分支。
git push origin -d <branchname> // 删除远程branchname分支
git push --tags // 推送所有标签
Git的撤销与回退,在日常工作中使用的比较频繁。比如我们想将某个修改后的文件撤销到上一个版本,或者想撤销某次多余的提交,都要用到git的撤销和回退操作。
代码在Git的每个工作区域都是用哪些命令撤销或者回退的呢,如下图所示:
有关于Git的撤销与回退,一般就以下几个核心命令:
1、git checkout
如果文件还在工作区,还没添加到暂存区,可以使用git checkout撤销
git checkout [file] 丢弃某个文件file
git checkout . 丢弃所有文件
2、git reset
为了更好地理解git reset,我们来回顾一下,Git的版本管理及HEAD的理解:
Git的所有提交,会连成一条时间轴线,这就是分支。如果当前分支是master,HEAD指针一般指向当前分支,如下:
假设执行git reset,回退到版本二之后,版本三不见了哦,如下:
2. Git Reset的几种使用模式:
代码git add到暂存区,并未commit提交:
git reset HEAD file 取消暂存
git checkout file 撤销修改
代码已经git commit了,但是还没有push:
git log 获取到想要回退的commit_id
git reset --hard commit_id 想回到过去,回到过去的commit_id
代码已经push到远程仓库
3、git revert
与git reset不同的是,revert 复制了那个想要回退到的历史版本,将它加在当前分支的最前端。
如果代码已经推送到远程的话,还可以考虑revert回滚:
git log 得到你需要回退一次提交的commit id。(git log -n 3。加上-n 3的话则只会打印最近3次提交)
git revert -n <commit_id> 撤销指定的版本,撤销也会作为一次提交进行保存。
HEAD 在 git 版本控制中代表头节点,也就是分支的最后一次提交,同时也是一个文件,通常在版本库中 repository/.git/HEAD,其中保存的一般是 ref: refs/heads/master 这种分支的名字,而本质上就是指向一次提交的 hash 值,一般长成这个样子 ce11d9be5cc7007995b607fb12285a43cd03154b。
HEAD指的就是==.git/HEAD文件,它储存着当前working directory所处的某次commit==,打开文件内容为:ref: refs/heads/master
refs目录下储存的是仓库和tags,每个仓库下又有分支,每个tags下又有tag,一个tag对应的某次commit。
// 存储本地local master分支的最新commit对象的SHA-1
refs/heads/master
// 存储远程仓库master分支的最新commit对象SHA-1
refs/remotes/origin/master
// 存储tag的SHA-1
tags/xxx
HEAD是当前分支引用的指针,它总是指向某次commit,默认是上一次的commit。这表示HEAD将是下一次提交的父节点。通常可以把HEAD看做你的上一次提交的快照。当然HEAD的指向是可以改变的,比如你提交了commit,切换了仓库,分支,或是回滚了版本,切换了tag等。
HEAD~ 和 HEAD^
回退到版本:git reset --hard HEAD~
albert@home-pc MINGW64 /d/gitstart (dev1)
$ git rev-parse --short HEAD~~
dcdcb87
albert@home-pc MINGW64 /d/gitstart (dev1)
$ git rev-parse --short HEAD^^
dcdcb87
albert@home-pc MINGW64 /d/gitstart (dev1)
$ git rev-parse --short HEAD~2
dcdcb87
albert@home-pc MINGW64 /d/gitstart (dev1)
$ git rev-parse --short HEAD^2
e330eac
// 前三个表示方法是一样的,指向同一个提交记录,但是最后一个与他们不同,这时根据前面提到定义来看就行了,HEAD~~ 实际上是 HEAD~1~1的简写,而~ 后的数字就是指的后退的步数,所以 HEAD~~ 等价于 HEAD~2,属于一种合并计算。
// HEAD^^ 是 HEAD^1^1 的简写,而 ^ 后面的数字表示后退一步到第几个父提交上,因为数字是1,所以 HEAD^^ 表示退一步到第一个父提交上,在退一步到第一个父提交上,这时与 HEAD~~ 的作用是相同的。
// HEAD^2 就有些不同了,它表示后退一步到第二个父提交上,所以对照树形图是第二排的第二个节点。
什么是tag
tag的简单使用
1、创建tag。
2、查看标签。
3、删除标签。
git tag -d 12345 #删除本地记录
git push origin :refs/tags/12345 #删除远程记录
4、检出标签。
5、其它
git remote // 查看关联的远程仓库的名称
git remote add url // 添加一个远程仓库
git remote show [remote] // 显示某个远程仓库的信息。
git pull = git fetch + git merge。相比之下,git fetch是一个更安全的选择,因为它从你的远程仓库拉入所有的提交,但不会对你的本地文件做任何修改。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。