Git 使用
Git工作流程
git可以分为三种状态
你的文件可能处于其中之一:已提交(committed)、已修改(modified)和已暂存(staged).
已提交表示数据已经安全保存在本地数据库中。
已修改表示修改了文件,但是还没保存到数据库中。
已暂存表示对一个已修改文件的当前版本作了标记,使之包含在下次提交的快照中
由此引入GIt项目的三个工作区域的概念:
- Workspace : 工作区
2.Index/Stage : 暂存区
3.Repository/ Reote : 仓库区(本地仓库、远程仓库)
##工作区
程序员进行开发改动的地方,是你当前看到的 ,也是最新的。
平时开发就是拷贝远程仓库中的一个分支,基于该分支进行开发。在开发过程中就是对工作去的操作。
##暂存区
.git 目录下的 index文件,暂存区会记录 git add 添加文件的相关信息,不保存文件实体,通过id指向每个文件实体,可以使用 git status 查看暂存区的状态,暂存区标记了你当前工作区中,哪些内容是被git管理的。
当我们完成某个功能的时候 第一步就是通过git add 先提交到暂存区,被git管理。
本地仓库
git commit ‘提交信息’ 提交到本地仓库
远程仓库
先要 git pull 作用 将远程的代码下载到本地 通常在push之前,需要先pull一次
git push 仓库地址 master 在代码提交到远程仓库,注意master分支必须写,不能省略
常用git命令
git init |
初始化仓库, 在当前目录下生成一个隐藏文件夹.git |
---|---|
git clone <url> |
克隆远程仓库 |
git status |
查看状态 |
git diff |
查看变更内容 |
git add . / git add -A / git add -all |
添加当前目录下所有的文件 |
git add *.js | 将当前目录下所有的js文件添加到暂存区 |
git add css | 将css目录下所有的文件添加到暂存区 |
git commit -m "提交说明" |
将文件从暂存区提交到仓库 |
git commit # 需要使用vi输入内容 |
如果不写提交说明,会进入vi编辑器,没有写提交说明,是提交不成功的。 |
git commit -a -m '提交说明' |
如果是一个已经暂存过的文件,可以快速提交,如果是未追踪的文件,那么命令将不生效。 |
git commit --amend -m "提交说明" |
修改最近的一次提交说明, 如果提交说明不小心输错了,可以使用这个命令 |
git config --list |
查看配置信息 |
git log |
查看提交的日志 |
git log --oneline |
简洁的日志信息 |
git reset |
作用:版本回退,将代码恢复到已经提交的某一个版本中。 |
git reset --hard 版本号 |
将代码回退到某个指定的版本(版本号只要有前几位即可) |
git reset --hard head~1 |
将版本回退到上一次提交 |
git mv <old> <new> |
文件改名 |
git rm <file> |
删除文件 |
git rm --cached <file> |
停止跟踪文件但 |
git log -p <file> |
查看指定文件的提交历史 |
git blame <file> |
以列表方式查看指定文件的提交历史 |
git checkout HEAD <file> |
撤销指定的未提交文件的修改内容 |
git revert <commit> |
撤销指定的提交 |
git branch |
显示所有分支 |
git checkout <branch/tag> |
切换到指定的 |
git checkout -b 分支名称 |
创建并切换分支 |
git branch -d 分支名称 |
可以删除分支 |
注意:不能在当前分支删除当前分支,需要切换到其他分支才能删除。注意:master 分支是可以删除的,但是不推荐那么做。 |
|
git merge 分支名称 |
将其他分支的内容合并到当前分支 |
git rebase 分支名称 |
衍合指定分支到当前分支 |
git remote -v |
查看远程版本库信息 |
git remote show <remote> |
查看指定远程版本库信息 |
git remote add <remote> <url> |
添加远程版本库 |
git fetch <remote> |
从远程库获取代码 |
git pull <remote> <branch> |
下载代码及快速合并 |
git push <remote> <branch> |
上传代码及快速合并 |
git push <remote> :<branch/tag-name> |
删除远程分支或标签 |
git push --tags |
上传所有标签 |
reset
1 | reset 命令 把当前分支指向另一个位置,并且相应的变动工作区和暂存区 |
revert
git revert用一个新提交来消除一个历史提交所做的任何修改。
revert 与 reset 的区别
- git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
- 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,减少冲突。但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入,产生很多冲突。关于这一点,不太理解的可以看这篇文章。
- git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。
关于参数 –hard 的解释
1 | git reset 的参数可以是以下三个值: |
当使用了git reset
命令后,版本会回退,使用git log
只能看到当前版本之前的信息。使用git reflog
可以查看所有的版本信息
git合并冲突
- 对于同一个文件,如果有多个分支需要合并时,容易出现冲突。
- 合并分支时,如果出现冲突,只能手动处理,再次提交,一般的作法,把自己的代码放到冲突代码的后面即可。