###参考自:Git教程-廖雪峰
1.初始化,配置用户名、邮箱
git config --global user.name "zhangsan"
git config --global user.email "123456@qq.com"
查看git的配置信息:
git config --list
2.创建版本库
git init
3.添加文件到仓库
git add 把文件添加到暂存区
git commit 把暂存区的所有内容提交到当前分支
git add <filename>
如:
git add file1.txt
git add file2.txt
git add file3.txt
以上3句可用一句搞定:
git add . (表示提交新建和修改,不包括删除)
另外:
git add -u (表示提交修改和删除,不包括新建)
git add -A (提交所有,包括新建、修改、删除)
4.查看当前仓库的状态
git status
5.查看某个文件有哪些变化
git diff <filename>
6.查看历史记录
git log
git log --pretty=oneline
7.回退版本
git reset --hard HEAD (回退到当前版本)
git reset --hard HEAD^ (回退到上一个版本)
git reset --hard HEAD^^ (回退到上上一个版本)
git reaet --hard <commit id> (回退到commit id对应的版本)
- 场景1:当你乱改了工作区的某个文件内容,想直接丢弃工作区的修改时,使用命令:
git checkout -- file
- 场景2:当你不但乱改了工作区的某个文件内容,还添加到了暂存区,此时若想丢弃修改,分两步。
第一步使用命令:git reset HEAD file
,就回到了场景1
第二步按照场景1操作 - 场景3:当你已经把乱改的文件提交到了当前分支,想要撤销本次提交,使用命令:
git reset --hard HEAD
回退版本
8.撤销修改
8.1 撤销工作区的修改:
git checkout -- <file name>
比如:
git checkout -- readme.txt
意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
8.2 撤销暂存区的修改:
git reset HEAD <file name> (撤销暂存区的修改,重新放回工作区)
9.删除文件 、恢复被删除的文件
9.1 假设我们把readme.txt删除了,而且要让版本库中该文件也删除:
git rm readme.txt
git commit -m "delete readme.txt"
9.2 假设我们删错了readme.txt文件,想要恢复该文件:
git checkout -- readme.txt
10.把本地仓库提交到github
首先在github上Create new Repository,这个仓库取名为MyCode。
关联本地仓库和远程仓库:
git remote add origin https://github.com/liujie537192/MyCode.git
然后,把本地库的所有内容推送到远程库上:
git push -u origin master
第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。之后推送master分支时:
git push origin master
11.克隆远程仓库到本地
git clone https://github.com/liujie537192/MyCode.git
12.分支
创建并切换分支:
git checkout -b <branch name>
切换分支:
git checkout <branch name>
创建分支:
git branch <branch name>
查看当前分支:
git branch
某分支合并到当前分支:
git merge <branch name>
删除分支:
git branch -d <branch name>
其他:
1.当git无法自动合并分支时,就必须要首先解决冲突,解决冲突后再提交,合并完成。使用git log --graph命令查看分支合并图:
git log --graph --pretty=oneline --abbrev-commit
2.合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史就可以看出分支信息。使用--no-ff参数,表示禁用Fast forward:
git merge --no-ff -m "合并信息" <branch name>
12.1 bug分支
当你接到一个修复一个代号001的bug的任务时,很自然地,你想创建一个分支bug-001来修复它。
但是,等等,当前正在dev上进行的工作还没有提交。并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办?
1.使用命令将当前工作现场储存起来:
git stash
2.假设需要在master分支上修复bug,切回到master分支,然后新建bug-001分支:
git checkout master
git checkout -b bug-001
3.修复bug,然后将bug-001分支合并到master分支:
git add -A
git commit -m "fix bug-001"
git checkout master
git merge --no-ff -m "fix bug-001" bug-001
4.删除bug分支:
git branch -d bug-001
5.回到dev分支继续干活:
git checkout dev
git status
git stash list 查看stash
git stash pop 恢复工作现场
13.多人协作
查看远程库的信息
git remote
查看远程库的详细信息
git remote -v
推送分支
git push origin <branch name>
抓取分支
git clone <分支地址>
当我们从别人的远程库克隆到本地时,在本地默认只能看到master分支(可以用git branch查看)。
假设别人的远程库有一个叫dev的分支,我们若想在dev分支上开发,需要创建远程的origin的dev分支到本地:
git checkout -b dev origin/dev
之后我们便可以通过下面这句命令提交修改到远程分支:
git push origin dev
提交修改前记得先pull:
git pull
如果git pull失败,一般来说是没有指定本地分支dev和远程分支origin/dev的链接:
git branch --set-upstream dev origin/dev
建立链接后,再git pull即可
14.标签
首先切换到需要打标签的分支上:
git checkout <branch name> 如:git checkout master
然后:
git tag <tag name> 如:git tag v1.0
默认标签是打在最新提交的commit上,如果想打在之前提交的commit上,
首先找到commit id:
git log
然后:
git tag v1.1 <commit id> 如:git tag v1.1 6a5819e
还可以创建带有说明的标签(-a指定标签名,-m指定标签说明文字,用git show <tag name> 可以看到说明文字):
git tag -a v1.2 -m "version 1.2 released" 6a5819e
查看标签:
git tag
标签打错了,可以删除标签:
git tag -d <tag name>
推送标签到远程:
git push origin <tag name>
一次性推送全部未到达远程的本地标签:
git push origin --tags
删除本地标签前面已有说明,如何删除远程标签?
首先删除本地的:
git tag -d <tag name>
然后:
git push origin :refs/tags/<tag name>
删除之后登录github查看远程标签是否删除