版本库(Repository)
工作区有一个隐藏目录.git
,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
一个git仓库管理一个工程
git init //创建一个仓库,在工程目录下有一个隐藏的目录.git
git add 文件 //提交到暂存区
git add . //在工程目录下git add . 就可以提交所有修改的和新建的数据暂存区
git commit -m "说明信息" //把暂存区内容提交到当前分支
git status //查看状态
git diff 文件 //查看文件修改,git diff比较文件被git add之前有无差异
git diff --cached 或 git diff --cached //查看已暂存的将要添加到下次提交里的内容的变化
git log //查看日志
git log --pretty=oneline
git log --graph --pretty=oneline --abbrev-commit //查看日志图表
git log -p -2 //-p 选项展开显示每次提交的内容差异,-2 则仅显示最近的两次更新:
git reflog //查看所有提交的log,可以查看每次变动的版本号,方便查阅
git reset --hard HEAD^ //回退到上一个版本
git reset --hard HEAD^^ //回退到上上个版本
git reflog //查看执行过的命令
git checkout -- 文件 //回退到上一次修改
git checkout . //这条命令把 当前目录所有修改的文件 从HEAD中签出并且把它恢复成未修改时的样子
git reset --hard 文件号 //指定回退到版本号对应的文件中去
git reset HEAD 文件 //可以回退版本,也可以把暂存区的修改回退到工作区。用HEAD,表示最新的版本
git rm 文件 //确实要从版本库中删除该文件,删除完再git commit
撤销修改
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,前提是没有推送到远程库,先用git reset -- hard HEAD^
创建远程仓库
1.git config --global user.name "Your Name"
2. git config --global user.email "[email protected]"
3.ssh-keygen -t rsa -C "[email protected]" //生成SSH密钥,一路回车,使用默认值即可,在用户主目录里找到.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key的秘钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥;登陆GitHub,打开“Account settings”,“SSH Keys”页面:然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub
文件的内容
4. git remote add origin 远程库URL //URL时是gihub中的SSH,添加新的远程仓库
5. git push origin master //远程提交 第一次提交用git push -u origin master
6.git remote set-url origin 你的远端地址 // 设置远端仓库地址
7.git remote add <shortname> <url> //添加一个新的远程 Git 仓库
eg:git remote add pg https://github.com/paul/tic //pg为远程仓库名
8.git remote -v //查看远程仓库
删除远程仓库
git remote rm origin //删除远程 Git 仓库
git clone 远程库URL //克隆一个本地库,从远程仓库中把工程克隆到本地电脑
git remote //查看远程库的信息
git remote show [remote-name] //查看某一个远程仓库的更多信息
git remote rename //去修改一个远程仓库的简写名 git remote rename pg pvul //将 pg 重命名为 pvul
git remote rm [remote-name] //删除指定的远程仓库
分支操作
git checkout -b dev //创建并切换到dev分支,分支名叫“dev”
注:要留意你的工作目录和暂存区里那些还没有被提交的修改,它可能会和你即将检出的分支产生冲突从而阻止 Git 切换到该分支。 最好的方法是,在你切换分支之前,保持好一个干净的状态。
git checkout 分支名 //切换分支
git branch //查看当前分支
git branch 分支名 //创建分支
git merge 分支名 //合并指定分支到当前分支
git branch -d 分支名 //删除分支
git branch -D 分支名 //删除分支
git branch --set-upstream-to=origin/dev dev //指定本地dev分支与远程origin/dev分支的链接,设置dev和origin/dev的链接
git pull //把最新的更新提交从远程库中抓下来
git pull origin(远程仓库名) master(分支名) //自动的抓取然后合并远程分支到当前分支
git push [remote-name] [branch-name]
git push origin --delete [branch-name] //删除远程的一个分支
git merge --abort //终止合并冲突
git merge --no-ff -m "相关说明信息" 分支名 // --no-ff参数,表示禁用Fast forward
git stash // 把当前工作现场“储藏”起来,等以后恢复现场后继续工作
git stash list //查看工作现场
git stash pop //恢复工作现场同时把stash内容也删了
将远程分支的dev分支重命名为deve分支步骤如下:
1.先删除远程分支: git push --delete origin dev
2.重命名本地分支: git branch -m dev deve
3.重新提交一个远程分支: git push origin deve
标签操作
git tag <name> //打一个新标签 如:git tag v1.0
git tag //查看所有的标签
git tag <name> commit id //给对应的commit id 打一个标签。如:git tag v0.9 f52c633
git log --pretty=oneline //可以查看到标签
git show <tagname> //查看标签信息 如: git show v0.9
git tag -d <tagname> //删除标签,如:git tag -d v0.1
git push origin --delete tag <tagname> //删除远程的标签
git push origin <tagname> //推送某个标签到远程
git push origin --tags //一次性推送全部尚未推送到远程的本地标签
删除远程标签的步骤
1.git tag -d <tagname> //先删除本地标签
2.git push origin :refs/tags/<tagname> //在从远程删除
多人协作模式
首先,可以试图用git push origin <branch-name>推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功
重点说明:
如果因为提交错误,可以git reset HEAD^ 回退到你要提交代码时的工作区,重新git add 想要的文件 到暂存区,然后git commit -m "" 提交,然后git push -f origin dev(分支名) //强推覆盖远程分支。