Git笔记
- git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容。(当后面修改了这次提交的部分数据会产生冲突,需要用户解决)
Git配置
配置级别:--local 项目级、--global 当前用户级、--system 系统级
用户名和邮箱
$ git config --global user.name "runoob"
$ git config --global user.email test@runoob.com
查看配置
$ git config --list
$ git config user.name
$ git --version
Git介绍
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
远程仓库
本地仓库由 git 维护的三棵“树”组成。
第一个是你的 工作目录,它持有实际文件;
第二个是 暂存区(Index),它像个缓存区域,临时保存你的改动;
最后是 HEAD,它指向你最后一次提交的结果,可以改变HEAD指向其他版本。
Git使用
基础命令
- $ git init
- $ git clone
- $ git add */*.txt/ git文件到暂存区
- $ git status (-s) 显示工作区文件和缓存区的区别
- $ git diff 执行 git diff 来查看执行 git status中->具体改动了什么?
- $ git commit -m '第一次版本提交' git 改变到版本库
- $ git rm hello.php 将条目从缓存区和工作区中移除。
- $ git mv README README.md
改名文件,并且将这个改名放入暂存区
撤销修改
- $ git reset -soft -mixed -hard HEAD <file>
。(如何撤销上次的 commit | git reset HEAD ~ 撤销上次的 commit ,从暂存移到工作区)git 取消commit (介绍了 reset 和)重置暂存区与工作区,与上一次commit保持一致
- $ git checkout --
[file]
恢复指定文件到工作区【恢复到最近的一次暂存区的状态,或初始工作区的状态】
分支管理
- $ git branch 列出分支
- $ git branch dev 创建 dev 分支
- $ git checkout dev 切换到 dev 分支
- $ git checkout -b master 创建并切换分支
- $ git branch -d dev 删除
- $ git merge (--no-ff -m "xxx") newtest 分支(newtest)合并到当前分支
- $ git push origin (name) 将分支推送到远程
标签管理
- $ git tag <atgname> <commit id> 新建一个标签
- $ git tag -a <tagname> -m "blablabla..." 指定标签信息
- $ git tag 查看所有标签
- $ git push origin <tagname> 可以推送一个本地标签;
- $ git push origin --tags 可以推送全部未推送过的本地标签;
- $ git tag -d <tagname> 可以删除一个本地标签;
- $git push origin :refs/tags/<tagname> 可以删除一个远程标签。
查看提交历史
- $ git log
- $ git log --oneline (简洁版本) --graph (拓扑图结构)
版本回退
- $ git reset --hard HEAD^ (版本号)回退到上个版本
- $
git reset --hard[--keep] 3628164 回退到3628164,
同时重置暂存区和工作区[
保持暂存区和工作区不变
] - $ git reflog 用来记录你的每一次命令(最新的命令在上面)。
忽略文件
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等。
在主目录下建立".gitignore"文件,此文件有如下规则:
1 #为注释 2 *.txt #忽略所有 .txt结尾的文件 3 !lib.txt #但lib.txt除外 4 /temp #仅忽略项目根目录下的TODO文件,不包括其它目录temp 5 build/ #忽略build/目录下的所有文件 6 doc/*.txt #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
Git 使用具体问题
本地仓库连接到某个远程服务器
- git remote add origin <server>
- git remote -v 查看远程仓库
- git remote rm [name] 删除远程仓库
git add README.md
git push -u origin master 强制push的方法
Push到GitHub出错
git push -u origin master -f 使用强制push的方法,会使远程修改丢失,本地的 master 和远程的 master 相互关联。
git pull origin master 拉下来、然后解决冲突、
git push -u origin master
什么时候使用git stash
git stash 可用来暂存当前正在进行的工作, 比如想pull 最新代码, 又不想加新commit, 或者另外一种情况,为了fix 一个紧急的bug, 先stash, 使返回到自己上一个commit, 改完bug之后再stash pop, 继续原来的工作。
- $ git stash 将当前的工作区内容保存到Git栈中,并且工作区返回到刚提交后的状态。
- $ git stash pop 从Git栈中恢复工作区的相关内容,并清空在栈中的保存信息。类似于(git stash apply 和 git stash drop)两条命令。
- $ git stash clear: 清空Git栈。
- $ git stash list 显示但钱 git 栈的信息
分支策略
master
分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;- 那在哪干活呢?干活都在
dev
分支上,也就是说,dev
分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev
分支合并到master
上,在master
分支发布1.0版本; - 你和你的小伙伴们每个人都在
dev
分支上干活,每个人都有自己的分支,时不时地往dev
分支上合并就可以了。 - 所以,团队合作的分支看起来就像这样: