Table of Contents
1.GIT结构:
GIT一般分为工作区、暂存区、本地仓库和远端分支:
- 工作区、暂存区、本地仓库在本地计算机上。
- 工作区:本地电脑上的文件夹
- 暂存区:工作区有一个隐藏目录 .git(这是git的版本库),里面含:stage的暂存区,git为我们创建的第一个分支master以及指向master的一个指针HEAD
2.初始化一个Git仓库
mkdir git_repo
git init
3.工作区(working area)
git status 随时掌握工作区的状态
git add <filename> 添加到暂存区的stage
git commit -m <message> 添加到暂存区的master
git diff <filename> 可以查看修改内容(如果git status告诉你有文件被修改过)
git checkout -- file 把file文件在工作区的修改全部撤销.其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
git rm file 从版本库中删除该文件
4.暂存区(stage):
git log 查看提交历史,以便确定要回到过去
git reflog 查看命令历史,以便确定要回到未来
git reset --hard commit_id 历史之间穿梭,HEAD指向的版本就是当前版本
git reset --hard HEAD^ 回退到上一个版本
5.本地仓库与github仓库:
git remote 查看远程库的信息
git remote -v 显示更详细远程库的信息
git remote add origin [email protected]:myname/learngit.git
把一个已有的本地仓库与github仓库关联添加后,远程库的名字就是origin,这是Git默认的叫法
git remote rm origin 删除已有的GitHub远程库
git push -u origin master 把本地库的所有内容推送到远程库上,由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
git clone 克隆
git push origin master 推送分支,就是把该分支上的所有本地提交推送到远程库,推送时,要指定本地分支
git push origin branch-name 推送其他分支
git pull 抓取远程的新提交
6.分支:
并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
master分支是主分支,因此要时刻与远程同步;
dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!
1>dev使用分支:
git branch 查看分支
git branch <name> 创建分支
git checkout <name> 切换分支
git checkout -b <name> 创建+切换分支
git merge <name> 合并某分支到当前分支 1.Fast-forward 2.Auto-merge 3.the 'recursive' strategy 4.
git merge --no-ff -m "merge with no-ff" dev --no-ff用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并看不出来曾经做过合并。
git branch -d <name> 删除分支
git log --graph 查看到分支合并图
git log --graph --pretty=oneline --abbrev-commit 查看到分支合并图
git push origin branch-name 推送分支
git push origin branch-name 抓取分支
git checkout -b dev origin/dev 创建本地dev分支, 小伙伴要在dev分支上开发,就必须创建远程origin的dev分支到本地
git branch --set-upstream branch-name origin/branch-name 建立本地分支和远程分支的关联
多人协作的工作模式通常是这样:
首先,可以试图用git push origin <branch-name>推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!
ps:如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。
2>Bug分支: --- 提供了一个stash功能
git stash 把当前工作现场“储藏”起来,等以后恢复现场后继续工作.
git stash list 查看stash储藏内容
git stash apply 恢复,但是恢复后,stash内容并不删除
git stash apply stash@{0} 恢复指定的stash
git stash drop 删除stash内容
git stash pop 恢复+删除stash内容
3>Feature分支:
每添加一个新功能,最好新建一个feature分支
开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
7.Rebase:
git rebase 特点:把分叉的提交历史“整理”成一条直线,看上去更直观。缺点是本地的分叉提交已经被修改过了。
8.标签:
1>创建标签:
git tag <tagname> 用于新建一个标签,默认为HEAD
git tag <tagname> <commit_id> 用于新建一个标签,指定一个commit id
git tag -a <tagname> -m "tag information" 可以指定标签信息,默认为HEAD
git tag -a <tagname> -m "tag information" commit id 可以指定标签信息,指定一个commit id
git tag 查看所有标签。PS:标签不是按时间顺序列出,而是按字母排序的。
git show <tagname> 查看标签信息
PS: 标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。
2>操作标签
git tag -d <tagname>可以删除一个本地标签;
git push origin <tagname>可以推送一个本地标签;
git push origin --tags可以推送全部未推送过的本地标签;
git push origin :refs/tags/<tagname>可以删除一个远程标签。PS:先删除本地标签
9.自定义Git:
git config --global color.ui true Git显示颜色,会让命令输出看起来更醒目
在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore
忽略文件的原则是:
忽略操作系统自动生成的文件,比如缩略图等;
忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
忽略某些文件时,需要编写.gitignore;
.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
git add -f App.class 如果你确实想添加该文件,可以用-f强制添加到Git:
10.配置:
1>配置别名:
git config --global alias.st status 告诉Git,以后st就表示status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.last 'log -1' 配置一个git last,让其显示最后一次提交信息
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" 甚至还有人丧心病狂地把lg配置成
2>配置文件:
1.每个仓库的Git配置文件都放在.git/config文件中
2.当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中
11.搭建Git服务器:
sudo apt-get install git 安装git
sudo adduser git 创建一个git用户,用来运行git服务