1 | git config --global user.name "Your Name" |
创建版本库
1 | mkdir learngit // 创建文件 |
时光穿梭机
- 版本回退
1 | git status // 检查本地文件的状态 |
- 工作区和暂存区
简单的讲就是我们编码的文件夹就是工作区,git add
的是暂存区,git commit
的是仓库。 - 管理修改
git commit
只会提交暂存区中的修改。
第一次修改 ->git add
-> 第二次修改 ->git add
->git commit
撤销修改
1
2git checkout -- readme.txt // 丢弃工作区的修改。git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令
git reset HEAD readme.txt // 撤销被交至暂存区的修改删除文件
1 | rm test.txt // 删除文件 |
一是确实要从版本库中删除该文件,那就用命令git rm
删掉,并且git commit
1
2
3$ git rm test.txt
$ git commit -m "remove test.txt"
// 小提示:先手动删除文件,然后使用git rm <file>和git add<file>效果是一样的。
另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:1
git checkout -- test.txt
远程仓库
添加远程仓库
ssh-keygen -t rsa -C "youremail@example.com"
生成公钥和秘钥,将公钥添加至GitHub的SSH Keys。1
2
3git remote add origin git@github.com:michaelliao/learngit.git // 将本地仓库与远程仓库关联起来
git push -u origin master // 将本地仓库推送至远程仓库,由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
git push origin master //把本地master分支的最新修改推送至GitHub从远程仓库克隆
git clone git@github.com:michaelliao/gitskills.git
分支
创建和合并分支
1
2
3
4
5
6
7
8
9
10
11git checkout -b dev // 创建并切换至dev分支
等价于
git branch dev // 创建分支
git checkout dev // 切换分支
git branch // 查看所有分支
git add readme.txt // 修改Dev分支上的readme.txt
git commit -m "branch test" // 提交至Dev分支
git checkout master // 切换至master分支
git merge dev // 合并分支
git branch -d dev // 删除Dev分支,因为此时Dev分支已经合并到master分支,Dev已经无用了解决冲突
1 | git checkout -b feature1 // 创建并切换至feature1分支 |
分支管理策略
1
2
3
4
5
6
7
8
9//通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
git checkout -b dev
git add readme.txt
git commit -m "add merge"
git checkout master
git merge --no-ff -m "merge with no-ff" dev
git log --graph --pretty=oneline --abbrev-commitbug分支
1 | git statu // 暂存目前的进度 |
Feature分支
1
2
3
4
5git checkout -b feature-vulcan
git add vulcan.py
git commit -m "add feature vulcan"
git checkout dev // 切回开发分支,准备合并
git branch -d feature-vulcan //多人协作
1 | git remote // 查看远程库信息 |
因此,多人协作的工作模式通常是这样:
- 首先,可以试图用
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>
。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。小结
- 查看远程库信息,使用
git remote -v
- 本地新建的分支如果不推送到远程,对其他人就是不可见的;
- 从本地推送分支,使用
git push origin branch-name
,如果推送失败,先用git pull
抓取远程的新提交; - 在本地创建和远程分支对应的分支,使用
git checkout -b branch-name origin/branch-name
,本地和远程分支的名称最好一致; - 建立本地分支和远程分支的关联,使用
git branch --set-upstream branch-name origin/branch-name
; - 从远程抓取分支,使用
git pull
,如果有冲突,要先处理冲突。
命令
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>
可以删除一个远程标签。