1. 基础
-
git init
通过git init
命令把这个目录变成Git可以管理的仓库` -
git add readme.md
添加到工作区 , 可添加到多次 -
git commit -m "add on file"
提交修改-
每次commit就相当于创建了一个快照
-
第一次执行这个命令的时候,会出现下面的提示,要求自报家门:邮箱 + 用户名(https://github.com/sub2019这是我的主页,用户名就是sub2019)
-
git config --global user.email "email@qq.com" git config --global user.name "sub2019"
-
-
git status
查看当前工作区的状态(有没有未添加的修改 , 有没有未提交的修改, 有没有推送, 删除)- 每次更改完毕, 可执行这个命令,查看状态
- 执行
git checkout -- hello.txt
可以放弃这次修改, 自动把这个文件的内容返回到修改之前
-
git diff
查看修改的内容- 需要在add之前执行
-
git log
查看每次修改的日志, 可以加上参数git log --pretty=oneline
表示只打印一行git reset --hard HEAD^
表示回退到上一个版本,相当于从20世纪 —> 19世纪- 这个时候最新版本就变了, 但是如果我想要回到20世纪, 前提是这个窗口没有关闭
git reset --hard 1094a
表示跳到指定的版本号对应的版本, 所以需要20世纪的版本号才行, 版本号不用写全,5位就够了- 所以只要能够查到版本号就能切换到任意版本
- 如果关了电脑怎么办?
git reflog
可以查看所有的版本号
-
git rm readme.md
删除一个文件 , 删除之后也要提交, rm 和 add命令类似都会操作到缓存区 -
cat readme.dm
查看一个文件的内容 -
git branch
查看当前分支 -
git checkout dev
切换到 dev 分支 -
git branch dev
创建 dev 分支 -
git checkout -b dev
创建 dev 分支 , 并且切换到 dev分支 -
git merge dev
合并dev分支 , 如果你想要合并到master上,就要先切换到master,再执行这个命令 -
git branch -d dev
删除 dev分支 -
git remote
查看远程库信息 -
git remote -v
查看远程库更加详细的信息 -
git push origin dev
把dev分支推送到远程 -
git push origin master
把本地的master分支推送到远程库 -
git push --set-upstream origin master
创建上游分支 , 如果没有这个条命令 , 推送的时候就要加上git push origin xxx
-
git push
当前分支推送到远程库,前提是你执行了上面的命令 -
git remote add origin git@github.com:sub2019/2019-11-8-learn-git.git # 本地库关联到远程库 git push -u origin master # 推送,-u表示把本地master和远程master关联起来,以后推送或拉取可以简化命令
2. 分支命令
创建一个分支,git checkout -b dev
,在dev分支上修改提交,然后切换到master分支进行合并,git merge dev
,完毕后删除dev分支 git branch -d dev
-
查看分支:
git branch
-
创建分支:
git branch <name>
-
切换分支:
git checkout <name>
或者git switch <name>
-
创建+切换分支:
git checkout -b <name>
或者git switch -c <name>
-
合并某分支到当前分支:
git merge <name>
-
删除分支:
git branch -d <name>
-
查看分支合并详情:
git log --graph --pretty=oneline --abbrev-commit
-
禁止fast forward模式合并:
git merge --no-ff -m "merge with no-ff" dev
-
丢弃一个没有被合并过的分支:
git branch -D <name>
3. 多人协作
- 克隆:
git clone <address>
- 查看远程库信息:
git remote
- 查看远程库详细信息:
git remote -v
- 推送分支:
git push origin <branchName>
- master和dev分支必须远程同步,bug分支不用,feature是否推送取决于你和你的同事是否在上面合作
- 克隆后只能看到主分支
- 创建远程的dev分支到本地:
git checkout -b dev origin/dev
- 假如你和你同事的提交有冲突造成你push失败,抓取最新提交,解决冲突,本地合并,再推送
- 抓取最新提交:
git push
- 如果
git push
提示 no strackong information,说明本地分支和远程分支的连接关系没创建 - 指定抓取的时候和哪个最新分支连接:
git push --set-upstream-to=origin/dev dev
4. bug分支
修复bug时候,通常会创建新的bug分支来修复,然后和并,最后删除
手头工作没完成,先把工作现场隐藏 git stash
,然后去修复bug,再git stash pop
,回到工作现场;
修复完毕后,因为你的支线是从主线克隆来的,说以也会有bug,在master修复的bug想要合并到当前dev分支,可以使用 git cherry-pick commitNum
, 把修复bug提交的分支复制到dev分支,避免重复劳动
如果你把修复的bug合并到当前dev分支,执行 cherry-pick 命令之前必须保证工作区干净,也就是要在你恢复工作区之前进行合并
可以从dev上开bug分支,修复后合并到dev,然后把bug修复复制到master上面
- 隐藏工作区:
git stash
, 可以隐藏多次 - 查看所有隐藏工作区:
git stash list
- 恢复工作区并且删除:
git stash pop
- 恢复工作区:
git stash apply
- 恢复指定工作区:
git stash apply stash@{index}
- 删除工作区:
git stash drop
- 复制一个特定的提交到当前分支:
git cherry-pick 4x805e2
, 用来合并修复的bug
5. 变基
- 整合分支的两种方法:merge和rebase
- rebase是在dev上打补丁,然后把补丁在master上面重放,相当于改变了commit的位置,让修改日志看起来像一条直线
- 查看日志(提交历史折线graph):
git log --graph --pretty=oneline --abbrev-commit
- 执行变基:
git rebase
6. 标签管理
- 也是版本库的快照,指向某个commit的指针,和分支类似但是不能移动
- commit号是6a5819e,版本号不好记所以引入快照
- 创建一个新标签(默认为HEAD,默认最新提交):
git tag v1.0
- 创建一个新标签(指定一个commit id):
git tag v1.0 f52c633
- 指定带有说明的标签:
git tag -a v0.1 -m "version 1.0 released" 1098ad
- 查看标签:
git tag
- 查看标签信息:
git show v1.0
- 删除标签(本地):
git tag -d v0.9
- 推送指定标签:
git push origin v1.0
- 推送所有未推送标签:
git push origin --tags
- 删除已经推送的标签:先本地删除,然后远程删除
git push origin :refs/tags/v0.9
7. 忽略特殊文件
-
创建 .gitignore文件, 写入要忽略的文件名称,然后把.gitnore提交到git
-
# Python: *.py[cod] *.so *.egg *.egg-info dist build # My configurations: db.ini
-
被忽略的文件无法被add
-
强制添加一个被忽略的文件:
git add -f app.py
-
检测gitignore规则:
git check-ignore -v app.py
8. 配置别名
-
单词太多不想记
-
git config --global alias.st status git config --global alias.ci commit git config --global alias.co checkout git config --global alias.br branch git config --global alias.unstate 'reset HEAD' git config --glboal alias.last 'log -1' #最新一次提交信息 git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
-
加上–global针对当前用户,不加针对当前仓库
这些内容都是学习廖雪峰老师的官网,当然还有其他的命令,我了解的就这些了,欢迎大家补充!!!