一:常用命令:
1. 进入某个目录 $ cd D: $ cd Git
2.返回上一级目录:$ cd .. //注意,cd和..之间必须有一个空格
3. 查看当前目录:$ pwd
4.$ git add readme.txt //表示将这个文件预添加到仓库,这一句不会有什么反应
5.$ git commit -m "add readme.txt" //描述干了什么
6.$ git init //把当前目录变为仓库
7.$ git status //查看状态
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
new2.txt
nothing added to commit but untracked files present (use "git add" to track)
//以上 new2.txt没有执行第4,第5步骤;
8.$ git reset HEAD //撤销4.$ git add readme.txt 这个步骤;
9.$ git log //查看历史提交 从最近到最远
10.$ git diff //查看修改内容
11. $ git log --pretty=oneline //历史记录变成一行,修改次数多时方便查看
12. $ git reset --hard HEAD^ //Git必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本,也就是最新的提交1094adb...
(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
13. $ git reset --hard 757c //757c是commit_id,序列号前4位,只要命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个append GPL
的commit id
是1094adb...
,于是就可以指定回到未来的某个版本:
14.$ git reflog //查询历史序号前7位;关掉窗口也可以查到;
15.$ git checkout -- readme.txt //把readme.txt
文件在工作区的修改全部撤销
16.$ git checkout -- readme.txt // 修改了文件,命令还原;
17.$ git rm test.txt //删除指定文件
18. $ ls //查询当前目录 和$ ll一样,但他可以查权限
$ git remote add origin ssh //关联远程地址 ssh地址git@github.com:michaelliao/learngit.git 写自己的
19.
$ git push -u origin master //把本地库的所有内容推送到远程库上
20.$ git clone 地址 //克隆地址 Git支持多种协议,包括https
,但通过ssh
支持的原生git
协议速度最快。
21.$ git checkout -b dev //命令加上-b参数表示创建并切换
22.git branch
命令查看当前分支 当前分支前面会标一个*
号。
23.git merge
命令用于合并指定分支到当前分支
24. git branch -D dev //删除分支dev
25.$ git log --graph --pretty=oneline --abbrev-commit //查看分支的合并情况
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用git log --graph
命令可以看到分支合并图。
合并分支时,加上--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward
合并就看不出来曾经做过合并
27.$ git stash //把当前工作现场“储藏”起来,等以后恢复现场后继续工作;
恢复的2种方法:
一是用git stash apply
恢复,但是恢复后,stash内容并不删除,你需要用git stash drop
来删除;
另一种方式是用git stash pop
,恢复的同时把stash内容也删了:
$ git stash apply stash@{0} //恢复指定的
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash
一下,然后去修复bug,修复后,再git stash pop
,回到工作现场。
Feature分支
开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>
强行删除。
git remote 或者,用git remote -v
显示更详细的信息.
master
分支是主分支,因此要时刻与远程同步;dev
分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
多人协作的工作模式通常是这样:
首先,可以试图用
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
,如果有冲突,要先处理冲突。
rebase操作可以把本地未push的分叉提交历史整理成直线;
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
30.$ git tag v1.0 //创建标签;
31.$ git tag //查看标签
32.git show <tagname>
查看标签信息
33.$ git tag -d v0.1 //删除标签
34.$ git push origin v1.0 //推送标签到远程库
$ git push origin --tags //一次性推送所有的本地标签到远程库
35.命令git push origin :refs/tags/<tagname>
可以删除一个远程标签。
36.git remote -v //查看关联远程库信息
37.git remote rm origin //删除已有的远程库
二。git配置