Git
1.创建版本库
- git init 把这个目录变成Git可以管理的仓库
- git add readme.md 把文件添加到仓库
- git commit -m “wrote a readme file”
-m
后面输入的是本次提交的说明
2.版本回退
- 修改readme.md内容
git add readme.txt
git commit -m “append GPL”
ps: git log
可以查看版本历史记录
- git reset –hard HEAD^
ps: HEAD^
表示上一个版本 HEAD^
表示上上个版本 HEAD~100
表示往上100个版本
- 命令行窗口还没有被关掉时,找到某个版本的
commit id
,也能进行回退。
git reset –hard xxxxxxxx
命令行窗口被被关掉时,使用git reflog
查看记录的每一次命令
3.工作区和暂存区
- 工作区
电脑里能看到的目录,比如gittest文件夹就是一个工作区
- 版本库
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库
git add
命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit
就可以一次性把暂存区的所有修改提交到分支。
git add . 添加所有数据
git commit -m “understand how stage works”
4.管理修改
- 对readme.txt做一个修改
git add readme.md
再修改readme.md
git commit -m “git tracks changes” 提交
- git status
然而,第二次修改并没有被提交,第一次修改 -> git add
-> 第二次修改 -> git commit
Git管理的是修改,当你用git add
命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit
只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。
git diff HEAD – readme.md 查看工作区和版本库里面最新版本的区别
- 提交第二次修改
第一次修改 -> git add
-> 第二次修改 -> git add
-> git commit
5.撤销修改
- git checkout – readme.md 丢弃工作区的修改
一种是readme.md自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.md已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
- git add后修改
git reset HEAD readme.md 把暂存区的修改撤销掉
git checkout – readme.md 丢弃工作区的修改
6.删除文件
- 先添加一个新文件test.txt到Git并且提交
git add test.txt
git commit -m “add test.txt”
- 直接在文件管理器中把没用的文件删了,或者用
rm
命令删除rm test.txt
从版本库中删除该文件,那就用命令git rm
删掉,并且git commit
git rm test.txt
git commit -m “remove test.txt”
删错了,因为版本库里还有,所以可以把误删的文件恢复到最新版本
git checkout – test.txt
7.远程仓库
- 添加远程库
在GitHub创建一个Git仓库
git remote add origin git@github.com:xxxxxxxx 关联
git push -u origin master 把本地库的所有内容推送到远程库上
- 从远程库克隆
git clone git@github.com:xxxxxxxxx
8.分支管理
- 创建与合并分支
git switch -c dev 创建dev分支,然后切换到dev分支
git branch 查看当前分支
修改readme.md git add readme.md git commit -m “branch test”
git switch master 切换回master分支
再查看readme.md文件,刚才添加的内容不见了!因为那个提交是在dev分支上,而master分支此刻的提交点并没有变。
git merge dev 把dev分支的工作成果合并到master分支上
git branch -d dev 删除dev分支
- 解决冲突
git switch -c feature1 准备新的feature1分支
修改readme.md
git add readme.md
git commit -m “AND simple” 在feature1分支上提交
git switch master 切换到master分支
在master分支上把readme.md进行不同修改
git add readme.md
git commit -m “& simple” 在master分支上提交
这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突。
git status 查看冲突的文件
手动修改文件解决冲突后再提交
git add readme.txt
git commit -m “conflict fixed”
git branch -d feature1 删除feature1分支
准备合并dev分支,请注意--no-ff
参数,表示禁用Fast forward
- Bug分支
git stash 把当前工作现场“储藏”起来,等以后恢复现场后继续工作
git switch -c issue-101
修改Bug,然后提交
git add readme.txt
git commit -m “fix bug 101”
修复完成后,切换到master分支,并完成合并,最后删除issue-101分支
git switch master
git merge –no-ff -m “merged bug fix 101” issue-101
git switch dev
git stash pop 删除stash
复制一个特定的提交到当前分支
git log
git cherry-pick 4e4858db453de3da86ee2eafc2
- 多人协作
git remote -v 查看远程库的详细信息
多人协作的工作模式通常是这样:
- 首先,可以试图用
git push origin
推送自己的修改;
- 如果推送失败,则因为远程分支比你的本地更新,需要先用
git pull
试图合并;
- 如果合并有冲突,则解决冲突,并在本地提交;
- 没有冲突或者解决掉冲突后,再用
git push origin
推送就能成功!
如果git pull
提示no tracking information
,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/
。
- 忽略特殊文件
在Git工作区的根目录下创建一个特殊的.gitignore
文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
不需要从头写.gitignore
文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore
把.gitignore
也提交到Git
请作者喝瓶肥宅快乐水
微信支付
支付宝