git 使用

Git 使用

Git工作流程

git

git可以分为三种状态

你的文件可能处于其中之一:已提交(committed)、已修改(modified)和已暂存(staged).
已提交表示数据已经安全保存在本地数据库中。
已修改表示修改了文件,但是还没保存到数据库中。
已暂存表示对一个已修改文件的当前版本作了标记,使之包含在下次提交的快照中

由此引入GIt项目的三个工作区域的概念:

  1. 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
2
3
4
5
reset 命令 把当前分支指向另一个位置,并且相应的变动工作区和暂存区
git reset --soft[commit] 只改变提交点,暂存区和工作目录的内容都不改变
git reset --mixed[commit] 改变提交点,同时改变暂存区的内容
git reset --hard[commit] 暂存区 工作区的内容都会被修改到与提交点完全一致状态
git reset --hard HEAD 让工作区回到上次提交时的状态

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的内容。

2

关于参数 –hard 的解释

1
2
3
4
5
git reset 的参数可以是以下三个值:
git reset --soft 版本号 : 只重置仓库区
git reset --mixed 版本号 : 重置仓库区和暂存区【默认】
git reset --hard 版本号 : 重置仓库区和暂存区和工作区。
git reset 版本号 : 效果与--mixed一致

当使用了git reset命令后,版本会回退,使用git log只能看到当前版本之前的信息。使用git reflog可以查看所有的版本信息

git合并冲突

  • 对于同一个文件,如果有多个分支需要合并时,容易出现冲突。
  • 合并分支时,如果出现冲突,只能手动处理,再次提交,一般的作法,把自己的代码放到冲突代码的后面即可。