Loading... ## 基本命令 ``` git init ---把当前目录变成git可以管理的仓库 git add <file> ---把文件添加到仓库 git add --all ---把当前目录所有内容添加到仓库 git commit -m <message> ---把文件提交到仓库 git status ---输出当前掌握的仓库状态 git diff <file> ---输出当前改文件与已提交的文件的对比 git log ---输出commit历史记录 git log --pretty=oneline ---输出commit历史记录精简版 git log --graph ---命令可以看到分支合并图。 git reset --hard HEAD^ ---回滚上一个版本,如果想回滚上上版本,需要使用HEAD^^,以此类推 git reset --hard <commit id> ---回滚到某一个版本,需要commit id git reflog ---记录了你的每一次命令 git checkout -- <file> ---让这个文件回到最近一次git commit或git add时的状态 git rm <file> ---用于删除一个文件 git rebase ---将多次commit合并为一个 ``` ## 远程控制 ``` git init git add --all git commit -m "first commit" git remote add origin https://github.com/AJDecade/xxx.git git push -u origin master ``` ## 分支管理 ``` git branch <name> ----创建分支 git checkout <name> ----切换分支 git branch ----git branch命令会列出所有分支,当前分支前面会标一个*号。 git merge <name> ----合并分支,与master分支合并 git merge --no-ff -m <message> <name> ----这样分支历史上就可以看出分支信息 git branch -d <name> ----删除分支 ``` ## 基本的工作模型 首先看三个基本概念: 1. 工作区: 代码存储的目录就是工作区。 2. 版本库: 工作区有一个隐藏目录.git,这个不算工作区,而是Git的本地版本库,你的所有版本信息都会存在这里 3. 暂存区: 英文为 stack 或 index,用来暂时存放修改过的文件。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index) ![0.jpg](https://blog.domineto.top/usr/uploads/2019/11/1504702783.jpg) ![1.jpg](https://blog.domineto.top/usr/uploads/2019/11/3097430949.jpg) ![2.jpg](https://blog.domineto.top/usr/uploads/2019/11/917514559.jpg) ## 团队工作的基本模型 1. 首先,可以试图用 `git push origin <branch-name> ` 推送自己的修改; 2. 如果推送失败,则因为远程分支比你的本地更新,需要先用 `git pull` 试图合并; 3. 如果合并有冲突,则解决冲突,并在本地提交; 4. 没有冲突或者解决掉冲突后,再用 `git push origin <branch-name>` 推送就能成功! ## 一些命令的使用笔记 ### git rebase 一个 repo 通常是由一个 team 中的多个人共同维护,如果需要增加新 feature ,那么就是一个 feature 分支了。由于开发中各种修改,对 feature 分支进行了多次 commit 。最后提交 master 后,会看到乱七八糟的所有增量修改历史。其实对别人来说,我们的改动应该就是增加或者删除,给别人看开发过程的增量反而太乱。于是我们可以将 feature 分支的提交合并后然后再 merge 到主干这样看起来就清爽多了。 #### rebase 简介 git rebase 的作用就是将多个 commit 合并为一个,这样就使得我们的提交历史变得干净,简洁。 !> 不要通过rebase对任何已经提交到公共仓库中的commit进行修改! #### rebase 具体操作 现在假设我们已经开发完了一个功能,但是在本地仓库的记录中有多次提交。在我们把本地提交push到公共仓库中之前,为了让提交记录更简洁明了,我们希望把最后三次提交合并为一个提交,然后再push到公共仓库。 这里我们使用命令: ``` git rebase -i [startpoint] [endpoint] ``` 其中`-i`的意思是`--interactive`,即弹出交互式的界面让用户编辑完成合并操作,`[startpoint] [endpoint]`则指定了一个编辑区间,如果不指定`[endpoint]`,则该区间的终点默认是当前分支HEAD所指向的 commit (P.S. 该区间指定的是一个前开后闭的区间)。 在查看到了log日志后,我们运行以下命令: ``` git rebase -i e88dbd1 ``` 或者 ``` git rebase -i HEAD~3 ``` 然后我们会看到如下界面: ![rebase.png](https://blog.domineto.top/usr/uploads/2019/11/1406066752.png) (因为截图时我的 PHPStorm 的 shell 似乎中文编码出了点问题,所以出现了乱码) 上面未被注释的部分列出的是我们本次rebase操作包含的所有提交,下面注释部分是git为我们提供的命令说明。每一个commit id 前面的pick表示指令类型,git 为我们提供了以下几个命令: > pick:保留该commit(缩写:p) > > reword:保留该commit,但我需要修改该commit的注释(缩写:r) > > edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e) > > squash:将该commit和前一个commit合并(缩写:s) > > fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f) > > exec:执行shell命令(缩写:x) > > drop:我要丢弃该commit(缩写:d) 根据我们的需求,我们可以将其更改为: ``` pick 3b53eee □□^}□□^d□^h^w表临□^w□□□^`□^t□□□^d□^p^f□^j^=□^c□ s 0d58be6 □□^}□□^d□^h^w表□□^x□^l^v s deea7a1 □^i□□^g^o导□^e□□□^}□□^d记□□^u ``` 意思就是将第二次和第三次的提交都合并到第一次的提交上去。 后面就是注释修改界面,直接修改就可以了。 #### 撤销 rebase 如果不小心填错了合并文件,我们可以通过 `git rebase --abort` 来撤销我们的 rebase。 ## Referrer [https://wulidecade.cn/2019/08/09/Git%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/](https://wulidecade.cn/2019/08/09/Git学习笔记/) https://www.jianshu.com/p/4a8f4af4e803 最后修改:2019 年 11 月 18 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏