安装git
Linux/Mac OS/Windows
示意图
自报家门
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。mkdir learngit 新建一个文件
cd learngit 变道这个文件
pwd 命令用于显示当前目录
初始化仓库
git init命令把这个目录变成Git可以管理的仓库,当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的ls -ah 可以看见 .git 隐藏文件git
文件操作
添加文件到Git仓库分两步:
git add <file> 添加文件到仓库
git commit -m<message>提交文件到仓库,后面 -m“” 是本次提交说明
git status 查看仓库当前状态
git diff readme.txt 查看deifference,修改的那些内容
管理修改
- git log 查看历史记录
- git log --pretty=oneline
- git reflog 查看命令历史,以便确定要回到未来的哪个版本
- HEAD 表示当前版本
- git reset --hard HEAD^ 回退到上一个版本(要找回上一个版本怎么办,在命令行窗口找回,commotion id ,git reset --hard 。。。。)
撤销修改
git checkout -- <file> 丢弃工作区的修改
git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区
git diff HEAD -- readme.txt 查看区别
git checkout -- readme.txt 让文件回到最近一次 git commit 或 git add 的状态
rm <file> 删除文件,git rm <file>删除版本库文件
确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit
远程仓库(关联GIthub服务器)
- git remote add origin git@github.com:ZhangFZ074/learng.git 关联Github库
- git push -u origin mastter 把本地 master 分支推送到 Github(下一次不用输入 -u)
- git clone git://github.com/ZhangFZ072/gitskills.git 克隆Github远程库到本地
- git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快
分支管理
创建与合并分支
- 查看分支:git branch
- 创建分支:git branch <name>
- 切换分支:git checkout <name>
- 创建+切换分支:git checkout -b <name>
- 合并某分支到当前分支:git merge <name>
- 删除分支:git branch -d <name>
- 用git log --graph命令可以看到分支合并图
- 合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
修复bug
*修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
多人协作
多人协作的工作模式通常是这样:
1.首先,可以试图用git push origin <branch-name>推送自己的修改;
2.如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
3.如果合并有冲突,则解决冲突,并在本地提交;
4.没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。
- 查看远程库信息,使用git remote -v;
- 本地新建的分支如果不推送到远程,对其他人就是不可见的;
- 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
- 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
- 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
- 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
标签管理
建立标签
- git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
- git tag -a <tagname> -m "blablabla..."可以指定标签信息;
- git tag可以查看所有标签。
操作标签
命令git push origin <tagname>可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d <tagname>可以删除一个本地标签;
命令git push origin :refs/tags/<tagname>可以删除一个远程标签。