GIT使用教程

GIT使用教程

GIT 使用教程

创建版本库

  1. 创建目录
mkdir workspace
cd workspace
  1. 创建版本库
git init
  1. 添加文件
git add file
  1. 提交文件
git commit -m "xxxx"

使用不同用户

时光机

版本回退

  1. 查看最近提交日志
git log
# q 键退出log模式
  1. 查看提交日志(简化信息)
git log --pretty=online
  1. 回退上一个版本
#回退上一个版本
git reset --hard HEAD^
#回退上上一个版本
git reset --hard HEAD^^
#回退上N个版本
git reset --hard HEAD~N
  1. 回退到指定版本
#回退指定版本号“1094a” 1094a是版本号开头5位,这里要保证git可以找到唯一指定的版号
git reset --hard 1904a
  1. 查找所有提交历史
#查找之前提交的命令,通过该命令可以找到需要回退的版本号
git reflog

查看工作区状态

git status

管理修改

git commit 命令提交的是git add 内容,没有git add 的内容不会被提交。

  1. 查看工作区和版本库里最新版本的差异
git diff HEAD -- file

撤销修改

  1. 在git add 之前撤销修改
#修改本地内容后,没有进行git add 提交,则可以使用该命令撤销本次修改
git chekout -- file
  1. 在git add 之后撤销修改
#在使用git add后, 可以使用以下命令将文件恢复到版本库最新版本,也可以理解为将暂存区修改撤销
git reset HEAD file
#查看状态
git status
#撤销工作区修改
git checkout -- file

删除文件

#本地删除文件
rm file
#git远程删除文件
git rm file
#提交远程仓库
git commit -m "xxxx"

远程仓库

关联远程仓库

  1. 关联远程仓库
#origin 为远程仓库的名字,可以自定义
#git@github.com:michaelliao/learngit.git 是github 的ssh链接 
git remote add origin git@github.com:michaelliao/learngit.git
  1. 推送代码到远程库
#将本地代码推送到远程库
#master是git创建的默认分支
git push -u origin master

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

  1. 推送到远程库
#在使用-u 参数推送后,便可以使用一下命令推送本地代码到远程仓库
git push origin master

克隆远程仓库

#指定目录
cd workspace
#克隆远程仓库
git clone git@github.com:daxingzsh/hello-world.git

分支管理

创建合并分支

  1. 创建分支
#创建dev分支
git branch dev
#切换到dev分支
git checkout dev
#也可以使用以下命令创建并切换分支
git checkout -b dev
#查看分支情况 *的标注表示当前所在分支
git branch
  1. 合并分支
#切换到主分支
git checkout master
#合并dev分支到master
git merge dev
#删除分支
git branch -d dev
#推送至远程仓库master
git push origin master
  1. 切换远程分支
    #在远程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 # 提交所有代码