基本概念
git: 工具,版本控制
github:网站,社交平台,开源项目,远程仓库
配置
git config --list
: 设置贡献者和查看所有配置项
设置贡献者
设置:name,email
git config --global user.name // 例如:git config --global user.name "smiel"git config --global user.email // 例如:git config --global user.erail "1129507496@qq.com"
查看配置项
git config --list: 查看所有配置项
修改别名:
执行: `git unstage`配置: `git config --global alias.unstage "reset HEAD"`
GIT三个区
- 工作区
- 暂存区
作用:作为过渡层避免误操作保护工作去和版本区分支处理
- 版本区(库)
GIT工具作用
- 从服务器上克隆完成的GIT仓库(包括代码和版本信息)到单机上。
- 在自己的机器上根据不同的开发目的,创建分支,修改代码。
- 在单机上自己创建的分支上提交代码。
- 在单机上合并分支。
- 把服务器上最新版的代码
fetch
下来,然后跟自己的主分支合并。 - 生成补丁
(patch)
,把补丁发送给主开发者。 - 一般开发者之间解决冲突的方法,开发者之间可以使用
pull
命令解决冲突,解决完冲突之后再向主开发者提交.
GIT优点
- 适合分布式开发,强调个体。
- 公共服务器压力和数据量都不会太大。
- 速度快,灵活。
- 任意两个开发者之间可以很容易的解决冲突。
- 离线工作。
GIT缺点
- 学习周期相对而言比较长
- 不符合常规思维
- 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息.
获取和创建项目
init
git init
:将一个目录初始化为 Git 仓库
执行init
命令之后,就有了一个GIT仓库的架子,可以开始项目开发,创建的新的GIT仓库里,任何时候,任何目录中任何操作,都是本地化。
clone
git clone url
: 复制一个GIT仓库
git cloen https://github.com/vuejs/vue.git
复制该项目中的全部记录,本地拥有代码,并且该操作将拷贝该项目的主分支,能够查看代码,或编辑,修改。进入到该目录中,会看到.git
子目录。所有的项目数据都存储该文件中.
基本操作
add
git add
: 文件添加到暂存区
git add .git add [name]
status
git status -s
: 查看在工作区和暂存区的状态
diff
git diff
工作区和暂存区的差异对比
git diff --cached(--staged) 暂存区和版本库的差异对比git diff master(分支名字): 分支之间的差异对比
commit
git commit
添加到版本库
git commit -m
: 执行弹窗文本编辑,需要添加注释
git commit -a
: 自动将提交前已经记录的,修改的文件放入缓存区. git add
提交缓存的流程太过繁琐, 可以通过git commit -a
跳过git add .
这一步。为任意已有记录的文件执行git add .
reset
git reset HEAD demo1.html
撤回提交到暂存区的文件
git reset --hard commit_id 对版本还原 HEAD^ HEAD~git checkout --hard a7git reset --hard HEAD^ 往回走一个版本git reset --hard HEAD~2 往回走两个版本
撤销:
git reset HEAD撤销到暂存区 git reset HEAD drag.jsgit checkout -- 把暂存区还原到工作区 git checkout -- drag.jsgit commit --amend 撤销到暂存区 git commit -m "change drag.js" --amend
恢复 :
git checkout commit_id对文件的还原git checkout a7e8623 drag.js
rm
git rm
删除
git rm
会将文件从缓存区中移除。这与git reset HEAD
将文件从取消缓存是有区别的,“取消缓存”的意思是将缓存去恢复为做出修改之前的样子。 git rm
则将该文件测底从缓存去踢出,因此不会有log日志,删除了文件.
执行git rm
来删除GIT追踪的文件。还会删除工作目录中的相应文件.
git rm删除暂存区的文件[手动删除工作区的文件,才可以使用] git rm test.txtgit rm -f 直接删除暂存区的文件. 工作区的文件也删除 git rm -f test.txtgit rm 0f --cached 只删除暂存区的文件,工作区的文件保留. git rm --cached test.txt
分支与合并
branch
git branch
创建分支
git branch创建分支git branch 查看分支
git branch 查看分支 -d --merged --no-merged git branch --merged 查看mster分支所合并的分支git branch --no-merged 查看没值合并的分支git branch -d new1 删除分支
checkout
git checkout
切换分支
git checkout 切换分支 -b git checkout new1 git checkout -b new2 // 创建new2分支,直接把创建的当作主分支
merge
git merge
合并分支
修改分支冲突:一旦发生冲突,手动进行修改.
git diff master origin/master 查看远端和工作区的区别git merge origin/master 合并代码,然后手动选择git pull 直接合并文件,少掉 diff和merge 的步骤 // 把远端的直接合并到master上.git fetch 一般情况下使用这个,可以查看出现问题的原因.
tag
git tag
给历史记录中某个重要的一点打上标签
git tag -a v1.0
git tag // 查看git tag v1.0 // 创建标签git push origin v1.0 // 同步到github
查看标签在日志中的信息
git log --oneline --decorate --graph
mv
git mv
移动或重命名
git mv file_old file_new
mv file_old file_new
info : 执行info指令,查询指令相关信息,会要求您输入欲查询的名称。cat : 执行cat指令,列出文件内容。gitview : 执行gitview指令,观看文件内容。vi : 执行vi指令,编辑文件内容。cp : 执行cp指令,复制文件或目录,会要求您输入目标文件或目录。mv : 执行mv指令,移动文件或目录,或是更改其名称,会要求您输入目标文件或目录。mkdir : 执行mkdir指令,建立目录。rm : 执行rm指令,删除文件或目录。make : 执行make指令,批处理执行指令或编译程序时,会要求您输入相关命令。git : 离开git文件管理员。
更新项目
remote
git remote
查看,添加和删除远端仓库
git remote -v origin git remote origin 远程仓库名字git remote -v 查看到仓库对于远程的地址
git remote add
项目添加一个新的远端仓库
git remote add [alias] [url]
git remote rm
删除现存的某个别名
git remote rm [alias]
fetch
git fetch
从远端仓库下载新分支与数据
git fetch [alias] 将仓库与远端仓库同步,提取所有它独有的数据到本地分支以合并或怎样。
pull
git pull
从远端仓库提取数据并尝试合并到当前分支
该命令是在git fetch
之后紧接着 git merge
远端分支到你所在的任意分支。
push
git push
本地改动推送到远端仓库
git push [alias] [branch] // 仓库名字,分支.
检查与比较
log
git log
显示一个分支中提交的更改记录.
需要了解当执行git commit
以存储一个日志的时候,都有什么信息被保存了。除了文件详单
,提交信息
,和提交者的信息
,Git还保存了此次提交所基于的日志信息。
git log --oneline
查看历史记录的紧凑简洁的版本.
git log --oneline --graph
查看历史中什么时候出现分支,合并,展示拓扑图.
git log --oneline master
查看特殊分支的日志信息
git log --author
git log --author
寻找某个特定的作者的提交
git log --author=v_linxingzhang --oneline -5
git log --since --before
git log --oneline --before={3.weeks.ago} --after={2017-01-06} --no-merges
git log -p
git log -p
显示每个提交引入的补丁
git log -p -2
git log --stat
git log --stat
显示每个提交引入的改动的差值统计
如果-p
选项太过详细,可以用--stat
总结改动。 使用--stat
选项时,同一份日志的输出。
git log 远程分支 origin/本地分支
> git log dev origin/dev
查看全部日志信息,包括本地没有更新远程信息.
diff
git diff
对比
git diff [version]
git diff 工作区和暂存区的差异对比git diff --cached(--staged) 暂存区和版本库的差异对比git diff master git diff 分支名字
git diff --stat
比较两个不同的分支,类似执行git diff branchA branchB
的命令
git diff --stat master dev
比较两个不同的分支,指定分支.
使用git diff
查看某一分支自它偏离出来起与过去某一点之间项目的改动。 总是使用git diff branchA ... branchB
来查看branchB
与 branchA
的相对差值.
其它
git stash
将文件给push 到一个回收站中
git stash pop
将文件给pop到一个回收站中git stash drop
将放入回收站的文件删除git push origin 本地分支名字:远程分支名字
本地分支添加到远程分支 git push --set-upstream origin master -f
和远程分支建立关联+ 强制推本地文件
git push origin :origin/master
删除远程分支需要加:
git checkout -b dev origin/dev
以远程分支创建本地分支
git checkout -m 旧分支名字 新分支名字
分支修改名字git checkout -b <本地分支名> origin/<远程分支名>
,git checkout -b v4.0 origin/v4.0
获取远程存在分支,本地不存在分支。 git cherry-pick <commit id>
对已经存在的commit进行再次提交.(不同版本,不同分支)