Git命令
创建版本库
git init
把当前目录变成可以管理的工作区。git可以看作由工作区、版本库两部分组成,版本库又分为暂存区和master分支
git add <file>
或git add -A
把文件修改添加到暂存区,Git跟踪并管理的是修改,而非文件。所以,每一次修改后,都要使用git add 命令
git commit -m "提交的说明"
一次性把暂存区的所有内容提交到当前分支(暂存区的所有内容清空),git commit相当于保存了一个快照,以后我们可以从指定的一个commit中进行恢复
版本管理
git log
或git log --pretty=oneline
查看提交历史,显示时间上由近到远的提交情况,其中看到的一大串随机字符串是每次提交自动生成的commit id
git reset --hard HEAD^
或git reset --hard 747534
表示返回上一个版本,HEAD表示当前版本,HEAD^^表示上一个版本的上一个版本,以此类推HEAD~100表示往上100个版本
747534表示版本号,这个版本号不一定要写全,git会自动去寻找对应的版本。如果你不记得版本号,可以使用命令
git reset HEAD file
把暂存区的修改撤销掉,放回到工作区
git reflog
查看命令历史
git diff HEAD -- aabb
查看aabb文件在工作区与版本库里最新版本的区别
git status
查看工作区每个文件的状态,Changes not staged for commit:表示修改的文件还没有从工作区提交到暂存区;Untracked files:表示文件还没有被添加过,所以状态是Untracked。对于这两种状态的文件,我们可以通过
- git add命令将其提交到暂存区。再用git status命令看到的就是Changes to be committed,其中分为newfile和modified两种类型。
- git commit命令提交所有修改到分之后,再用git status命令看到的就是nothing to commit,表示工作区是干净的
On branch master,Your branch is ahead of ‘origin/master’ by 2 commits,nothing to commit, working directory clean表示本地的所有改动都已经通过2次commit操作更新到本地仓库了,但是远程仓库还没有进行这2次commit,我们可以通过 git push origin master让远程仓库与本地仓库同步
git checkout -- aabb
把aabb文件在工作区中的修改全部撤销,让它回到暂存区的aabb文件状态,暂存区的aabb文件状态为空则回到分支的aabb文件状态。总得来说git checkout – aabb,对于误删和误改都有一键还原的作用。
git rm
从分支中删除掉一个文件,紧接着要使用git commit命令提交这种删除操作到分支。
远程仓库
在本地创建了一个Git仓库后,又想在GitHub创建一个可以与本地仓库同步的Git仓库,这样,Git仓库既可以发挥备份和与他人协作的作用。
git remote add origin git@github.com:XXXXX/xxxx.git
把一个已有的本地仓库与Git仓库关联,Git仓库的名字置为origin
git@github.com:XXXXX/xxxx.git 走的是SSH协议,https://gitee.com/XXXXX/xxxx.git走的是https协议 可以通过 git remote add 带不同格式的参数,选择不同的协议
git remote remove origin
取消与本地关联的远程库
git push -u origin master
把本地库的master推送到Git仓库,一般在push之前要先git pull origin master,然后进入一个信息填写页面,填写备注信息后,存盘退出即可
-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。之后
git push origin master
把本地master分支的最新修改推送至Git仓库
把Git仓库和本地仓库关联的最好方式是:先创建远程库,然后,从远程库克隆
git clone git@github.com:XXXXX/xxxx.git
克隆一个仓库到本地,Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin
git remote
或git remote -v
查看远程仓库的信息或详细信息,对于-v参数:显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址
分支管理
自己创建的分支,对于别人是不可见的,而且自己的分支可以和主分支合并
git checkout -b dev
创建dev分支,然后切换到dev分支,相当于以下两条命令
git branch dev
和git checkout dev
新创建的分支是指向当前的master分支的
git branch
查看当前分支命令,当前分支会加上*号
git merge
合并指定分支到当前分支
git branch -d dev
删除分支dev,合并分支到master后就可以删除dev分支了
git log --graph
查看分支合并图
git merge --no-ff -m "merge with no-ff" dev
- 在合并分支时,如果不产生冲突,默认采取Fast forward模式,这种模式下,删除分支后,会丢掉分支信息,看不出来曾经做过合并过
- 加上
--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并
git stash
可以把当前工作现场储藏起来,等以后恢复现场后继续工作
git stash list
查看被存储的工作场
git stash pop
恢复工作场,并把储藏的工作场删掉
git branch -D <name>
开发一个新功能,最好新建一个分支,如果要丢弃一个没有合并过的分支,就可以通过-D参数强行删除
git push origin xxx
把xxx分支上的所有本地提交推送到远程库对应的分支上,但是,并不是一定要把本地分支往远程推送:
master
分支是主分支,要时刻与远程同步- dev分支是开发分支,所有成员都要在上面工作,也需要与远程同步
- bug分支只用于在本地修复bug,就没必要推到远程了
- feature分支根据实际情况决定
git checkout -b dev origin/dev
创建远程origin的dev分支到本地,用这个命令创建本地dev分支
git pull
把最新的提交从抓下来,如果在pull的时候提醒no tracking information,说明本地分支和远程分支的链接关系没有创建,就用命令
git branch --set-upstream dev origin/dev
指定本地dev分支与远程origin/dev分支的链接
git push origin dev
把dev分支push到远程对应的dev分支
[ ] 多人协作的工作模式流程如下:
- 试图用git push origin branch dev推送自己修改的dev分支
- 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并
- 如果合并有冲突,则解决冲突,并在本地提交
- 解决掉冲突后,再用git push origin branch dev推送
标签管理
用tag打标签唯一确定一个版本,比使用commit id更方便,Git的标签其实就是指向某个commit的指针
git checkout master
首先,切换到需要打标签的分支上
git tag v1.0
给master分支上的当前commit打上v1.0的标签
git tag v0.9 6224937
给指定的commit版本打上标签
git tag
查看所有标签,标签出现的顺序按照字母排列顺序
git show v0.9
查看打了标签的commit的所有信息
git tag -a <tagname> -m "......."
指定标签信息为…….
git tag -d v0.1
删除指定标签v0.1
git push origin v0.1
推送标签v0.1到远程
git push origin --tags
一次性推送全部尚未推送到远程的本地标签
如果标签已经推送到远程,要删除远程标签就:
it tag -d v0.9
先删除本地标签v0.9git push origin :refs/tags/v0.9
再远程删除标签v0.9
自定义Git
某些文件在Git工作目录中,但又不需要提交它们。在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
- 在项目的根目录下启动git bash窗口,执行touch .gitignore
- 然后在.gitignore中编辑规则
#过滤掉文件夹下的所有内容
/bin/
#过滤掉所有class文件
*.class
#过滤掉指定文件
/bin/a.class - 执行git add .和git commit -m “update gitignore”命令提交规则
参考资料
[1] https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
[2]:http://www.runoob.com/git/git-tutorial.html
[3]:https://git-scm.com/