git config --global user.name "xxxx"
git config --global user.email "xxxx"
创建一个版本库:
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit 说明仓库位于此路径内
通过git init命令把这个目录变成Git可以管理的仓库
把一个文件放到Git仓库:
1.用命令git add告诉Git,把文件添加到仓库git add readme.txt
2.用命令git commit告诉Git,把文件提交到仓库git commit -m "wrote a readme file"
运行git status
查看文件是否被修改 git status命令可以让我们时刻掌握仓库当前的状态
如果git status告诉你有文件被修改过,用git diff
可以查看修改内容。
知道做了什么修改之后,再提交修改:
1.git add xxx
2.git commit -m "xxx版本名"
git log
再看看现在版本库的状态
在Git中,用HEAD表示当前版本 使用git reset命令:$ git reset --hard HEAD^
查看文件内的内容 :cat xxxx
指定回到未来的某个版本:$ git reset --hard xxx
版本号前几位
Git提供了一个命令git reflog
用来记录你的每一次命令
10.20
stage暂存区 master分支
Git跟踪并管理的是修改,而非文件
多次修改步骤: 不要忘记使用git add将新修改的文件放到暂存区,然后一起提交
第一次修改 -> git add -> 第二次修改 -> git add -> git commit
撤销修改:
刚修改之后,未add:git checkout -- file
可以丢弃工作区的修改
add后 :命令git reset HEAD file
可以把暂存区的修改撤销掉(unstage),重新放回工作区
删除文件:rm file
此时使用git status可以得知哪个文件被删除
从来没有被添加到版本库就被删除的文件,是无法恢复的!
两个选择1.确实要从版本库中删除:git rm file 并且提交git commit
2.点错了 恢复最新版本:git checkout -- file
创建一个新的分支 git checkout -b dev (约等于 git branch dev git checkout dev)
用git branch
命令查看当前分支 他会列出所有分支,当前分支前会标一个星号
可正常进行提交
切换回master分支: git checkout master
将dev分支的工作成果合并到master分支上:git merge dev
删除dev分支:git branch -d dev
切换分支还可使用 switch
创建并切换到新的dev:git switch -c dev
直接切换到已有的master分支:git switch master
10.21
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用git log --graph命令可以看到分支合并图。 git log --graph --pretty=oneline --abbrev-commit
fast forward模式下,删除分支后会丢掉分支信息
使用–no-ff方式的git merge:git merge --no-ff -m "merge with no-ff" dev
(∵要创建新的commit,所以加-m)
合并后的历史有分支,能看出来曾经做过合并
分支策略
bug分支解决流程:
git stash功能 暂时隐藏bug
git stash list
查看工作现场
解决bug
恢复stash内容:1、git stash apply
恢复后,stash内容并不删除,需要用git stash drop来删除
2、git stash pop
,恢复的同时把stash内容也删了
恢复指定的stash,用命令:git stash apply stash@{0}
cherry-pick
命令,让我们能复制一个特定的提交到当前分支 master的bug解决后,复制到dev
feature分支:每添加一个新功能都要新创建一个分支,完成后,合并,删除该分支
Git友情提醒,分支没有被合并,如果删除,将丢失掉修改,如果要强行删除,需要使用大写的-D参数。
远程仓库
git remote add origin git@github.com:michaelliao/learngit.git
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程
git push origin master
将本地master分支的最新修改推送至GitHub
git remote -v
:查看远程库信息 git remote
也可以
删除远程库 git remote rm
使用git clone克隆一个本地库git clone [email protected]:michaelliao/gitskills.git
推送分支:git push origin master
master是主分支,与远程同步
dev是开发分支 在此工作 也需同步
bug分支在本地修复bug
feature分支 看情况
抓取分支:共同推送失败,因为你的小伙伴的最新提交和你试图推送的提交有冲突
:先用git pull
把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送
设置dev和origin/dev的链接:git branch --set-upstream-to=origin/dev dev
再git pull
再push
因此,多人协作的工作模式通常是这样:
首先,可以试图用git push origin
推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull
试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin
推送就能成功!
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建
用命令git branch --set-upstream-to
。
rebase
rebase操作可以把本地未push的分叉提交历史整理成直线;
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
git rebase
标签管理 默认标签是打在最新提交的commit上的
使用git tag v1.0
打新标签
git tag
查看所有标签
对历史提交的id打标签 先git log。。。找到id,再git tag v0.9 id号
使用git show v
标签 查看标签信息
创建带有说明的标签(-a指定标签名 -m指定说明文字):git tag -a v0.1 -m "version 0.1 released" 1094adb
删除标签:git tag -d v0.1
推送标签到远程: git push origin v1.0
一次性推送全部尚未推送到远程的本地标签:git push origin --tags
删除推送到远程的标签:1.删除本地2.删除远程git push origin :refs/tags/v0.9
远程是否删除成功需要github查看
在GitHub上,可以任意Fork开源仓库;
自己拥有Fork后的仓库的读写权限
让Git显示颜色,会让命令输出看起来更醒目:git config --global color.ui true
忽略某些文件时,需要编写.gitignore;
.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
要添加一个被.gitignore忽略的文件 强制添加git add -f App.class
git check-ignore -v App.class 若.gitignore有问题,检查哪个规则写错
配置Git的时候,加上–global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用
查看配置文件cat .git/config