目录
目录
一、git安装
Linux下安装:
sudo apt-get install git
用户名和密码设置:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
二、创建版本库
1.创建文件夹
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
2.初始化
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
三、连接远程仓库
1.创建SSH Key
ssh-keygen -t rsa -C "youremail@example.com"
2.在远程仓库添加SSH Key
根绝具体远程库进行操作
四、几个空间
工作区、暂存区、本地版本库、远程仓库
五、基本操作
git status | 查看仓库当前的状态 |
git add 文件名 | 提交到暂存区 |
git commit –m “说明内容” | 把文件提交到仓库,实际就是提交到当前分支 -m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的 commit可以一次提交很多文件,所以你可以多次add不同的文件 |
git log | 显示从最近到最远的提交日志 |
git diff | 不加参数即默认比较工作区与暂存区 --cached, 比较暂存区与最新本地版本库 |
git reflog | 重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本 |
git checkout -- file | 撤销工作区修改,用暂存区来覆盖工作区 |
git reset HEAD <file> | 可以把暂存区的修改撤销掉,重新放回工作区,去掉暂存区最近的一次提交,工作区内容不变 |
git reset --hard 版本号 | 版本回退,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,用本地版本库来覆盖暂存区、工作区 |
git rm | 删除工作空间文件 |
git remote add origin git@server-name:path/repo-name.git | 关联远程仓库,Gihub举例 $ git remote add origin git@github.com:michaelliao/learngit.git |
git push -u origin master | 把本地库的内容推送到远程,实际上是把当前分支master推送到远程 第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令 从现在起,只要本地作了提交,就可以通过命令:git push origin master |
git clone [url] | 克隆一个仓库到本地 |
git branch <name> git checkout <name> | 创建分支 |
git switch <name> git checkout <name> | 切换分支
git switch命令加上-c参数表示创建并切换 |
git branch | 会列出所有分支,当前分支前面会标一个*号。 |
git merge <name> | 命令用于合并指定分支到当前分支 |
git branch -d <name> | 删除分支: |
git stash | 可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作 |
git stash list | 查看stash内容 |
git stash apply | 恢复后,stash内容并不删除,你需要用git stash drop来删除 |
git stash pop | 恢复的同时把stash内容也删了 |
git cherry-pick <commit> | 把bug提交的修改“复制”到当前分支,避免重复劳动 |
git branch -D <name> | 丢弃一个没有被合并过的分支,强行删除 |
git remote | 查看远程库的信息 |
git remote -v | 显示更详细的信息 |
git push origin branch-name | 从本地推送分支 master分支是主分支,因此要时刻与远程同步; dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步; bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug; feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。 |
git pull | 抓取远程的新提交 |
git branch --set-upstream branch-name origin/branch-name | 建立本地分支和远程分支的关联 |
git rebase | 变基 |
git tag <tagname> | 新建一个标签,默认为HEAD,也可以指定一个commit id; |
git tag -a <tagname> -m "blablabla..." | 可以指定标签信息; |
git tag | 查看所有标签 |
git push origin <tagname> | 推送一个本地标签 |
git push origin --tags | 推送全部未推送过的本地标签; |
git tag -d <tagname> | 可以删除一个本地标签; |
git push origin :refs/tags/<tagname> | 删除一个远程标签。 |
六、其他
6.1 解决冲突
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
Git冲突与解决方法 - 马非白即黑 - 博客园 https://www.cnblogs.com/gavincoder/p/9071959.html
6.2 分支策略
Git分支十分强大,在团队开发中应该充分应用。
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
6.3 Bug分支
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场;
在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
6.4 多人协作的工作模式
首先,可以试图用git push origin <branch-name>推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。