Git 学习笔记(1)
@([12] git)
原文链接:http://blog.csdn.net/TJUT_shadow/article/details/77530637
创建版本库
- 在当前目录新建一个Git代码库:
git init
- 新建一个目录,将其初始化为Git代码库:
git init [project-name]
- 下载一个项目和它的整个代码历史:
git clone [url]
git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快
增/删文件
- 添加指定文件到缓存区:
git add<file>
- 添加指定目录到缓存区:
git add [dir]
- 改名文件,并且将这个改名放入暂存区:
git mv [file-original] [file-renamed]
- 添加当前目录的所有文件到暂存区:git add
代码提交
- 提交缓存区修改到仓库区:
git commit -m "message"
- 提交缓存区指定文件到仓库区:
git commit <file> -m "message"
- 提交工作区自上次commit之后的变化,直接到仓库区:
git commit -a
分支管理
- 查看分支:
git branch
- 创建分支 :
git branch <name>
- 切换分支 :
git checkout <name>
- 创建+切换分支:
git checkout -b <name>
- 合并某分支到当前分支:
git merge <name>
- 删除分支:
git branch -d <name>
Bug分支
- 隐藏当前工作现场:
git stash
- 回到工作现场:
git stash pop
恢复时把stash内容也删除了 - 查看隐藏现场列表:
git stash list
- 回到指定工作现场:
git stash apply stash@{编号}
恢复后stash内容并不删除,需要git stash drop来删除除,需要git stash drop来删除 - 删除stash内容:
git stash drop
Feature 分支
新的开发功能最好新建一个分支,在开发完成后再合并到主分支上。
如果需要丢弃一个没有被合并过的分支,需要强行删除分支
- 强行删除分支:
git branch -D <name>
分支策略
- master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
- dev是干活的分支,大家从自己的分支时不时的向dev分支上合并
git merge --no-ff -m"merger with no-ff" dev
合并分支时加上--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能够看出来曾经做过合并。fast forward
合并无法看出曾经做过合并。
本地新建的分支如果不推送到远程,对其他人就是不可见的。
哪些分支需要推送
- master分支是主分支,因此需要时刻与远程同步
- dev分支是开发分支,团队所有成员都需要在上面工作,所以需要与远程同步
- bug分支用于在本地修复bug,没必要推送远
- feature分支是否推到远程,取决于与你合作的是否在上面开发
多人协作的工作模式
首先,可以试图用git push origin branch-name推送自己的修改
- 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
- 如果合并有冲突,则解决冲突,并在本地提交
- 没有冲突或者解决掉冲突后,再用git push origin branch-name 推送就能成功
如果git pull提示“no tracking information” 则说明本地分支和远程分支的链接关系没有创建,用命令git branch –set-upstream branch-name origin/branch-name
远程同步
- 关联一个远程仓库:
git remote add origin 仓库路径
eg. git remote add origin https://github.com/EricLee0107/learngit.git
- 第一次推送master分支的所有内容:
git push -u origin master
- 之后每次修改推送:
git push origin master
- 取回远程仓库的变化,并与本地分支合并:
git pull [remote] [branch]
- 上传本地指定分支到远程仓库:
git push [remote] [branch]
-强行推送当前分支到远程仓库,即使有冲突:git push [remote] --force
- 推送所有分支到远程仓库:
git push [remote] --all
查看信息
- 查看仓库当前的状态:
git status
- 查看文件修改:
git diff
- 查看提交历史:
git log
- 查看命令历史:
git reflog
查看分支合并图:
git log --graph
git在解决合并冲突时的做法是先将冲突合并起来,然后再手动修改冲突,重新提交,解决冲突。显示所有远程仓库:
git remote -v
- 显示某个远程仓库的信息:git remote show [remote]
撤销操作
- 回退到某个特定版本:
git reset --hard commit_id
-
- 撤销(丢弃)工作区修改 :
git checkout --file
- 撤销(丢弃)工作区修改 :
- 撤销缓存区修改:
git reset HEAD file
如果修改已经提交到缓存区则需要先从缓存区撤销修改,再从工作区撤销修改.
git 版本
当前版本:HEAD
上一个版本:HEAD^
上上个版本:HEAD^^
上N个版本:HEAD~N
标签
- 新建标签:
git tag <name>
默认为HEAD,也可以指定一个commit id; - 指定标签信息:
git tag -a <tagname> -m"blablabla..."
- 用PGP签名标签:
git tag -s <tagname> -m"blabla..."
查看所有标签:
git tag
推送一个本地标签:
git push origin <tagname>
- 推送全部未推送过的本地标签:
git push origin --tags
- 删除一个本地标签:
git tag -d <tagname>
- 删除一个远程标签:
git push origin :refs/tags/<tagname>
删除远程标签前需要先删除本地标签
其他
忽略某些文件时,需要编写.gitignore (工作区根目录下)
.gitignore 文件本身要放到版本库例,并且可以对其做版本管理
配置参考 https://github.com/github/gitignore