GIT使用教程
GIT 使用教程
创建版本库
- 创建目录
mkdir workspace
cd workspace
- 创建版本库
git init
- 添加文件
git add file
- 提交文件
git commit -m "xxxx"
使用不同用户
时光机
版本回退
- 查看最近提交日志
git log
# q 键退出log模式
- 查看提交日志(简化信息)
git log --pretty=online
- 回退上一个版本
#回退上一个版本
git reset --hard HEAD^
#回退上上一个版本
git reset --hard HEAD^^
#回退上N个版本
git reset --hard HEAD~N
- 回退到指定版本
#回退指定版本号“1094a” 1094a是版本号开头5位,这里要保证git可以找到唯一指定的版号
git reset --hard 1904a
- 查找所有提交历史
#查找之前提交的命令,通过该命令可以找到需要回退的版本号
git reflog
查看工作区状态
git status
管理修改
git commit 命令提交的是git add 内容,没有git add 的内容不会被提交。
- 查看工作区和版本库里最新版本的差异
git diff HEAD -- file
撤销修改
- 在git add 之前撤销修改
#修改本地内容后,没有进行git add 提交,则可以使用该命令撤销本次修改
git chekout -- file
- 在git add 之后撤销修改
#在使用git add后, 可以使用以下命令将文件恢复到版本库最新版本,也可以理解为将暂存区修改撤销
git reset HEAD file
#查看状态
git status
#撤销工作区修改
git checkout -- file
删除文件
#本地删除文件
rm file
#git远程删除文件
git rm file
#提交远程仓库
git commit -m "xxxx"
远程仓库
关联远程仓库
- 关联远程仓库
#origin 为远程仓库的名字,可以自定义
#git@github.com:michaelliao/learngit.git 是github 的ssh链接
git remote add origin git@github.com:michaelliao/learngit.git
- 推送代码到远程库
#将本地代码推送到远程库
#master是git创建的默认分支
git push -u origin master
由于远程库是空的,我们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令。
- 推送到远程库
#在使用-u 参数推送后,便可以使用一下命令推送本地代码到远程仓库
git push origin master
克隆远程仓库
#指定目录
cd workspace
#克隆远程仓库
git clone git@github.com:daxingzsh/hello-world.git
分支管理
创建合并分支
- 创建分支
#创建dev分支
git branch dev
#切换到dev分支
git checkout dev
#也可以使用以下命令创建并切换分支
git checkout -b dev
#查看分支情况 *的标注表示当前所在分支
git branch
- 合并分支
#切换到主分支
git checkout master
#合并dev分支到master
git merge dev
#删除分支
git branch -d dev
#推送至远程仓库master
git push origin master
- 切换远程分支
#在远程git服务器创建dev分支后,需要先在本地pull git pull #查看远程分支, 会看到git远程服务器创建的dev分支 git branch -a #checkout dev分支 git checkout -b dev origin/dev #查看当前所在分支, * 的就是当前分支 git branch -a
冲突解决
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交
#查看分支合并图
git log --graph
#
git log --graph --pretty=oneline --abbrev-commit
分支管理策略
通常,合并分支时,如果可能,Git会用Fast forward
模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用Fast forward
模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
#创建并切换到dev分支
git checkout -b dev
#添加修改的文件
git add <file>
#提交修改文件
git commit -m "add merge"
#切换到主分支
git checkout master
#使用no-ff方式merge分支dev
git merge --no-ff -m "merge with --no-ff" dev
#查看分支图
git log --graph --pretty=oneline --abbrev-commit
Bug分支
#保存当前工作区状态
git stash
#切换到主分区
git checkout master
#创建新的分支,修复bug
git checkout -b issue-101
#修复bug,添加文件
git add <file>
#提交
git commit -m "fix bug 101"
#切换到主分区
git checkout master
#合并bug分支
git merge --no-ff -m "merged fix bug 101" issue-101
#删除分支
git branch -d issue-101
#切换dev分区
git checkout dev
#查看状态
git stash list
#恢复状态
git stash pop
git stash apply stash@{0}
Feature分支
每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支
#创建新的功能开发分支
git branch -b feature-vulcan
#切回到dev开发分支
git checkout dev
#没有merge的情况下,强制删除新功能分支
git branch -D featrue-vulcan
多人协作
#查看远程仓库
git remote
#查看远程仓库详细信息
git remote -v
#推送主分支到远程仓库
git push origin master
#推送dev分支到远程仓库
git push origin dev
#组内其他人员克隆远程仓库
git clone git@github.com:daxingzsh/LearnGit.git
#生成dev分支
git checkout -b dev origin/dev
#解决冲突
#拉取
git push
#解决冲突后在提交远程仓库
Rebase
#rebase操作可以把本地未push的分叉提交历史整理成直线
git rebase
标签管理
创建标签
#创建标签,默认创建在最新的一次commit上
git tag v1.0
#查看标签
git tag
#指定版本标签
git tag v0.9f52c633
#查看标签详细信息
git show v0.9
#添加带有说明的标签
git tag -a v0.1 -m "version 0.1 released" 1094adb
操作标签
#删除标签
git tag -d v0.1
#推送标签
git push origin v0.1
#推送所有未提交远程仓库的标签
git push origin --tags
#删除已经推送到远程仓库的标签
#先删除本地标签
git tag -d v0.9
#删除远程标签
git push origin :refs/tags/v0.9
自定义GIT
忽略特殊文件
.gitignore 文件配置
https://github.com/github/gitignore
多个GIT源问题
最近做项目时,发现无法提交某个子文件夹下的文件。
google后发现可能是该子文件夹下有.git文件夹导致无法上传。
删除子文件夹下.git后,依然无法提交子文件夹下的文件。
# 删除不同源的目录
git rm --cached directory
# 重新添加该目录
git add directory
# 当 执行git rm --cached directory时,提示
# fatal: Unable to create 'xx/.git/index.lock': File exists.
rm -f xx/.git/index.lock
后解决
查看GIT配置
# 使用命令git config -e
# 在当前git项目的根目录下,文件位于 .git/config (.git目录为隐藏文件)
本地仓库重新设置源
git commit -m "Change repo." # 先把所有为保存的修改打包为一个commit
git remote remove origin # 删掉原来git源
git remote add origin [YOUR NEW .GIT URL] # 将新源地址写入本地版本库配置文件
git push -u origin master # 提交所有代码