1. 安装Git
git config --global user.name "<用户名>" 设置用户名
git config --global user.email "<邮件地址>" 设置Email
2. 创建版本库
-
git init 初始化git仓库,把当前所在目录变成git可管理的仓库
-
git add <文件名> 把指定的文件添加到仓库,可反复多次使用,添加多个文件。如果要添加目录下所有文件,使用git add . 。提交修改和提交新文件都使用git add。
-
git commit -m "<提交说明>" 提交文件到仓库。
-m
后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
3. 时光穿梭机
git status 查看仓库当前的状态
git diff <文件名> 查看指定文件的修改内容
3.1 版本回退
git log 查看从当前版本到最远版本的提交日志,如果回退了版本,回退版本后面的版本提交的日志就看不到了。
git reset --hard HEAD^ 本地代码回退到上一个版本
git reset --hard HEAD~100 本地代码回退到往上第100个版本
git reset --hard [commit_id] 本地代码回退到指定版本,commit id是需要回退到版本的提交标识id。版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。
git reflog 查看命令历史。包含每条命令的commit_id、提交命令、提交说明
3.2 撤销修改
git checkout -- <file> 把file文件在工作区的修改全部撤销,有两种情况:
一种是文件自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是文件已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
没有--
,就变成了“切换到另一个分支”的命令。
git reset HEAD <file> 把暂存区的file文件修改撤销掉(unstage),重新放回工作区。还要再执行git checkout -- <file> 把工作区的修改撤销才撤销修改。
3.3 删除文件
git rm <file> 删除file文件然后提交到暂存区。相当于手动删除file文件然后git add <file>操作,效果一样。
4. 远程仓库
-
git remote add <远程库别名> <远程库地址> 本地仓库关联远程库。适用先有本地库,后有远程库时。
-
git push -u <远程库别名> <需要推送的本地分支名> 第一次推送本地分支的所有内容到远程仓库中,加上-u参数,git不到把内容推送到远程仓库,还把本地分支和远程分支关联起来,以后的推送或拉取就可以简化命令。使用去掉-u的命令推送。
-
git push <远程库别名> <需要推送的本地分支名> 推送本地分支的最新修改到远程仓库中
-
git clone <远程库地址> 克隆远程库到本地
5. 分支管理
5.1 创建与合并分支
- git branch 查看所有分支,当前分支前面会标一个符号"*"
- git branch <分支别名> 创建分支
- git checkout <分支别名> 切换到已有分支
- git checkout -b <分支别名> 创建+切换分支
- git switch <分支别名> 切换到已有分支(git新版本新增)
- git switch -c <分支别名> 创建+切换分支命令(git新版本新增)
- git merge <分支别名> 合并某分支到当前分支(fast forward模式合并)
- git branch -d <分支别名> 删除分支
5.2 解决冲突
-
git status 查看仓库当前状态
-
git log 查看commit历史记录,按回车可以往下查看,按Q退出查看
-
git log --graph 查看分支合并图
5.3 分支管理策略
git merger --no-ff -m "commit说明" <分支别名> 禁用Fast forward进行合并分支
两种模式合并分支的区别:
- 不加--no--ff参数时,fast forward模式下合并,删除分支后,会丢掉分支信息,看不出来曾经做过合并。
- 加上--no-ff参数时,禁用fast forward模式下合并,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息,能看出来曾经做过合并。
5.4 Bug分支
每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
- git stash 储藏工作现场,可以储藏多次
- git stash list 查看工作现场列表
- git stash apply 恢复工作现场,但工作现场内容并不删除
- git stash apply <工作现场别名> 当有多次stash时,恢复指定的工作现场(git stash list命令可以查看工作现场别名)
- git stash drop 删除工作现场
- git stash pop 恢复工作现场并删除
- git cherry-pick <commit_id> 把其他分支上的提交修改“复制”到当前分支,commit_id为需要复制的提交的id。
5.5 Feature分支
开发一个新功能,最好新建一个feature分支。在feature分支上面开发,完成后,合并,最后,删除该feature分支。
git branch -D <分支别名> 强行删除分支。(要丢弃一个没有被合并过的分支时,无法使用git branch -d命令删除分支。)
5.6 多人协作
-
git remote 查看所有远程库信息
-
git remote -v 显示详细的所有远程库信息。 上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。
-
git push <远程库别名> <需要推送的本地分支名> 推送本地分支的最新修改到远程仓库中
并不是一定要把本地分支都往远程推送,那么,哪些分支需要推送,哪些不需要呢?
-
master分支是主分支,因此要时刻与远程同步;
-
dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
-
bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
-
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
-
总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!
- git checkout -b <本地分支别名> origin/<远程分支别名> 在本地创建和远程分支对应的分支
- git branch --set-upstream-to <本地库分支别名> origin/<远程库分支别名> 建立本地分支和远程分支的关联。git pull时提示There is no tracking information for the current branch.说明没有关联。
- git pull <远程库别名> <远程库分支别名> 从远程抓取最新的提交
5.7 Rebase
- git rebase 把本地未push的分叉提交历史整理成直线,
6. 标签管理
6.1 创建标签
- git tag 查看所有标签
- git tag <tagname> 在当前分支打一个新标签,默认标签是打在最新提交的commit(HEAD)上的。tagname是命名的标签名称。
- git tag <tagname> <commit_id> 在指定提交上打一个新标签。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。
- git tag -a <tagname> -m <标签说明> <commit_id> 在指定提交上打一个新标签,并加上标签说明文字。tagname是命名的标签名称,commit_id可选,不指定commit_id时标签默认打在最新提交的commit(HEAD)上。
- git show <tagname> 查看标签信息
6.2 操作标签
-
git push origin <tagname> 推送一个本地标签
-
git push origin --tags 推送全部未推送过的本地标签
-
git tag -d <tagname> 删除一个本地标签
删除远程标签
[1] git tag -d <tagname> 先删除本地标签
[2] git push origin :refs/tags/<tagname> 推送删除标签
7. 自定义Git
7.1 忽略特殊文件
- git add -f <fileName> 强制添加文件到git(被忽略的文件也可以添加,不加-f无法添加被忽略的文件)
- git check-ignore -v <fileName> 查看文件被忽略的是因为哪条规则。Git会告诉我们,.gitignore的第几行规则忽略了该文件。
7.2 配置别名
- git config --global alias.<别名> 原始命令 被原始命令起别名,相当于简写。使用别名和原始命令效果一样。当原始命令中有多个单词,包含空格时,应该使用单引号''把原始命令包起来,如果不加单引号将使用别名后的第一个单词作为原始命令。
示例:
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
$ git config --global alias.st status
$ git config --global alias.unstage 'reset HEAD'
$ git config --global alias.last 'log -1'
--global参数
--global参数是全局参数,是针对当前用户起作用的,也就是这些命令在这台电脑的所有Git仓库下都有用。如果不加,那只针对当前的仓库起作用。
配置文件位置
- 每个仓库的Git配置文件都放在.git/config文件
- 用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig
配置文件内容
[alias] 别名
[user] 用户相关配置
网友评论