1、创建版本库
在工作目录下:git init
2、添加文件到版本库
git add <file>( <file2> <file3>…) --将工作区的文件添加到暂存区,可一次性提交多个文件
git commit -m "注释性语句" --将暂存区中的文件提交到版本库中
3、查看工作区状态
git status --查看工作区状态,会说明哪些修改未add,哪些修改需要commit,
如果没有,则会显示nothing to commit, working directory cleaning。
git diff
git diff (<file> --查看工作区与暂存区文件差异
git diff --cached (<file>) --查看暂存区与本地版本库文件差异
git diff head (<file>) --查看工作区与本地版本库文件差异
4、回退版本
git log (--pretty=oneline) --查看历史提交记录
git reflog --查看历史操作命令
git reset --hard HEAD^ --将当前版本回退到上一个版本,
HEAD指向的是当前版本,上一个版本HEAD^,上上一个版本HEAD^^,往上10个版本HEAD~10
git reset --hard commit_id --将当前版本回退到指定提交ID对应的版本,提交ID可以通过git log和git reflog查找
注:git log显示的内容可能会比较多,但git bash上显示不下时,最下面会有一个冒号:,指示还有更多的内容,这是通过上下箭头就可以选择内容进行查看,要退出按q键即可,要查看其他命令,按h键。
5、撤销修改
git checkout -- file --可以丢弃工作区的修改,把版本库的文件替换工作区的版本。
当自修改后文件未被添加到暂存区,则撤销修改回退到提交到版本库后的状态;
当文件已经添加到暂存区,又做了修改,则撤销修改回退到添加到暂存区后的状态。
git reset HEAD file --将暂存区的修改回退到工作区
eg:当不但改乱了工作区某个文件的内容,又添加到了暂存区,如果想撤销修改,先git reset,后git checkout -- file
6、删除文件
rm file --将工作区中的文件删除
git rm --将暂存区的文件删除,之后commit,即可删除版本库中的文件
git checkout -- file 将版本库的文件替换到工作区,可恢复误删的文件
7、与远程仓库相连
1)在Git Bash中:ssh-keygen -t rsa -C "youremailaddress",一路回车,将在用户目录的.ssh中产生两个文件id_rsa和id_rsa.pub,是产生的秘钥对,id_rsa是私钥,不可泄露,id_rsa.pub是公钥。
2)在GitHub中SSH Keys中将公钥添加上即可
3)在GitHub上创建仓库test
4)在本地仓库下运行命令:git remote add origin git@server:XXXXXXXXX/test.git
5)第一次将本地仓库文件上传到远程仓库中:git push -u origin master
6)后续再推送:git push origin master
在上传文件到远程仓库时,可能出现如下错误:
error: failed to push some refs to 'git@server:XXXXXXXXX/mytest.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
大多是因为远程仓库中README.md不在本地仓库中
解决方法:先pull再push
git pull --rebase origin master :README.md将出现在本地
git push -u origin master --将文件上传到远程仓库
8、克隆远程仓库到本地
首先在远程先创建好仓库
在Git Bash中:git clone git@server:XXXXXXXXX/mytest.git,在当前目录会出现一个mytest文件夹
注:git支持多种协议,有多个地址 ,包括https,以及通过ssh支持的原生git协议,后者速度最快。
使用https,速度慢每次推送必须输入口令,在只开放http端口的时候,不能使用ssh协议,只能使用https
9、分支管理
git branch --查看分支
git branch <name> --创建分支
git checkout <name> --切换分支
git checkout -b <name> -- 创建并切换分支
git merge <name> --合并某个分支到当前分支,当有冲突时,需要手动处理
git merge --no-ff <name> --禁用fast-forward模式,合并后的历史分支,可看出曾经做过合并,fast-forward看不出
git branch -d <name> --删除分支
git brach -D <name> --强行删除分支,适用于需要丢弃没有被合并过的分支
git log --graph --pretty=oneline --abbrev-commit --查看分支合并图
10、stash
当当前分支还有未提交的修改,又需要另开分支时,可使用stash将当前工作现场储存起来。
git stash --储藏当前工作现场,执行后,使用git status查看工作区,没有未提交的修改
git stash list --查看stash列表
git stash apply stash@{n} --恢复工作现场,n表示序号,在list中有,恢复后,list内容依旧存在
git stash pop --恢复工作现场,同时把stash list内容删除
11、多人协作
git remote -v --查看远程库信息
将本地分支推送到远程分支:
• 本地新建分支若不推送到远程,则对其他人不可见
• git push origin <branch> --从本地推送分支,若失败,先用git pull抓取远程的新提交
• git checkout -b <branch> origin/<branch> --在本地创建与远程分支对应的分支,本地和远程分支名称最好一致
• git branch --set-upstream <branch> origin/<branch> --建立本地分支与远程分支的关联
• git pull --从远程抓取分支,若有冲突,需先处理冲突
12、标签
git tab <tagname> --新建标签,默认HEAD,也可指定commit_id
git tab -a <tagname> -m '<comments>' --指定标签描述信息
git tab -s <tagname> -m '<comments>' --用PGP签名标签,但是必须安装gpg(GunPG),若没找到gpg或无gpg密钥,会报错
git tab --查看所有标签
git show <tagname> --查看某个标签的具体信息
git push origin <tagname> --可将一个本地标签推送到远程
git push origin --tags --可将全部未推送过的本地标签推送到远程
git tag -d <tagname> --可删除一个本地标签
git push origin :refs/tags/<tagname> --可删除一个远程标签
13、忽略特殊文件
场景:在提交时将某类文件忽略提交
在工作区的根目录新增一个文件.gitignore,将需要忽略的文件名放入即可。
也可将GitHub上各种情景的.gitignore文件组合使用,在线浏览地址:https://github.com/github/gitignore
.gitignore文件本身要放到版本库中,且可对该文件进行版本管理
git add -f <fillname> --强制对某文件添加到暂存区,忽略.gitignore文件的作用
git check-ignore -v <filename> --检查igitignore文件中具体哪个规则将文件忽略
14、配置文件
git config --global alias.st status --配置别名,st是status别名,
--global说明该配置对当前用户生效,配置信息添加在用户主目录下的.gitconfig(D:UsersXXX.gitconfig);如果没有则对当前仓库起作用,配置信息添加在仓库根目录下的.git文件夹下的config文件中。若需要删除配置,直接删除文件中对应行即可
git config --global alias.st --查看配置信息,--global查看全局配置变量,去掉--global查看当前仓库生效的配置信息