1.
初始化一个Git仓库,使用git init命令。
2.添加文件到Git仓库,分两步:
(1)使用命令git add ,注意,可反复多次使用,添加多个文件;
(2)使用命令git commit -m ,完成。
3.回退版本
把当前版本回退到上一个版本,就可以使用git reset
命令:
$ git reset --hard HEAD^
HEAD is now at e475afc add distributed
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
。
穿梭前,用git log
可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog
查看命令历史,以便确定要回到未来的哪个版本。
4.撤销修改
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>
,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
5.删除文件
般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm
命令删了:
$ rm test.txt
6.添加远程库
要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git
;
git remote add origin git@github.com:heqishan/learngit.git
关联后,使用命令git push -u origin master
第一次推送master
分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改;
7.从远程库克隆
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。
$ git clone git@github.com:heqishan/gitskills.git
8.创建与合并分支
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
9.解决冲突
当Git
无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git
合并失败的文件手动编辑为我们希望的内容,再提交。
用git log --graph
命令可以看到分支合并图。
10.分支管理策略
合并分支时,如果可能,Git
会用Fast forward
模式,但这种模式下,删除分支后,会丢掉分支信息。
合并dev
分支,请注意--no-ff
参数,表示禁用Fast forward
:
$ git merge --no-ff -m "merge with no-ff" dev
11.bug分支
当前分支dev
分支工作还未提交,接到一个修复一个代号101
的bug
的任务时,你想创建一个分支issue-101
来修复它
Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
$ git stash
Saved working directory and index state WIP on dev: f52c633 add merge
现在,用git status
查看工作区,就是干净的(除非有没有被Git
管理的文件),因此可以放心地创建分支来修复bug
。
首先确定要在哪个分支上修复bug
,假定需要在master
分支上修复,就从master
创建临时分支:
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 6 commits.
(use "git push" to publish your local commits)
$ git checkout -b issue-101
Switched to a new branch 'issue-101'
切换到master
分支,并完成合并,最后删除issue-101
分支
用git stash list
命令看看:
$ git stash list
stash@{0}: WIP on dev: f52c633 add merge
工作现场还在,Git
把stash
内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply
恢复,但是恢复后,stash
内容并不删除,你需要用git stash drop
来删除;
另一种方式是用git stash pop
,恢复的同时把stash
内容也删了
再用git stash list
查看,就看不到任何stash
内容了:
$ git stash list
注意:stash
前不能有未被追踪的文件,即,在git stash
之前一定要用git status
确认没有Untracked files
12.Feature分支
开发一个新feature
,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>
强行删除。
13.多人协作
要查看远程库的信息,用git remote
或者,用git remote -v
显示更详细的信息
推送分支:$ git push origin master
如果要推送其他分支,比如dev
,就改成:
$ git push origin dev
master
分支是主分支,因此要时刻与远程同步;
dev
分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
bug
分支只用于在本地修复bug
,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug
;
feature
分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
多人协作
查看远程库信息,使用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
,如果有冲突,要先处理冲突。
14.创建标签
命令git tag <tagname>
用于新建一个标签,默认为HEAD
,也可以指定一个commit id
;
命令git tag -a <tagname> -m "blablabla..."
可以指定标签信息;
命令git tag
可以查看所有标签;
git show <tagname>
查看标签信息
15.操作标签
命令git push origin <tagname>
可以推送一个本地标签;
命令git push origin --tags
可以推送全部未推送过的本地标签;
命令git tag -d <tagname>
可以删除一个本地标签;
命令git push origin :refs/tags/<tagname>
可以删除一个远程标签。
16.使用github
点“Fork
”就在自己的账号下克隆了一个仓库,然后,从自己的账号下clone
一定要从自己的账号下clone仓库,这样你才能推送修改。