1、先安装git sudo apt-get install git
2、设置git 用户名和邮箱
git config --global user.email "you@example.com"
git config --global user.name "Your name"
3、开始使用
首先创建一个版本库
mkdir mygit
git init
4、提交写的内容
git add readme.txt
git commit -m "add a readme file"
5、修改文件内容,再执行第四步
6、查看当前文件的状态 git status
7、若文件被修改过,用git diff 可以查看(在修改过未提交之前可以用这个命令查看)
8、查看修改日志 git log
忽略没有必要的信息 git log --pretty=online
9、回退版本
Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,
也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),
上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比
较容易数不过来,所以写成HEAD~100
回退上一版本 git reset --hard HEAD^
回退指定的版本 git reset --hard commit_id(前七位)
git在内部有个指向当前版本的HEAD指针
git reflog 记录你的每一次命令
10、介绍工作区和暂存区
工作区:能看的到的目录,.git是一个隐藏目录,不是工作区,而是Git的版本库
版本库:包括暂存区和分支master
git add 把文件添加进去,实际上就是把文件修改添加到暂存区
git commit 提交更改,实际上就是把暂存区的所有内容提交到当前分支
11、git管理的是修改,并不是文件
当你把把文件添加到暂存区,未提交之前再修改,提交之后发现并不是最终版本
原因是你没有把最后修改的文件给添加上去
12、撤销修改
1) 当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
2) 当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用
命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
3) 已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
13、删除文件
git rm filename
14、远程仓库
要关联一个远程库,使用命令git remote add origin https://www.github.com/zsjfenger/learngit.git
关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改
15、远程库的克隆
使用https除了速度慢意外,还有个最大的麻烦是每次推送都必须输入口令,但是默写只开放http
端口的公司内部就无法使用ssh协议而只能用https
1) git clone https://github.com/zsjfenger/gittest.git
2) git clone git@github.com:zsj/gittest.git
16、分支管理
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
17、解决冲突
当主分支master和新的分支都进行修改,提交合并发生冲突时,手动修改,并添加提交
查看分支合并图 git log --graph --pretty=oneline --abbrev-commit
18、分支管理
合并:git merge --no-ff -m "content" dev
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,
能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
19、强行删除分支 git branch -D feature-vulcan
20、多人协作
git pull 抓取远程最新的提交,如果抓取失败,可能是没有指定本地dev分支与远程origin/dev分支的链接,根据提示
,设置dev和origin/dev的链接:git branch --set-upstream dev origin/dev
并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
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 branch-name origin/branch-name。
21、标签
命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag -a <tagname> -m "blablabla..."可以指定标签信息;
git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;
命令git tag可以查看所有标签。
git show <tagname> 可以看到文字说明
命令git push origin <tagname>可以推送一个本地标签到;(远程)
命令git push origin --tags可以推送全部未推送过的本地标签;(远程)
命令git tag -d <tagname>可以删除一个本地标签;
命令git push origin :refs/tags/<tagname>可以删除一个远程标签。(先删除本地标签)
2、设置git 用户名和邮箱
git config --global user.email "you@example.com"
git config --global user.name "Your name"
3、开始使用
首先创建一个版本库
mkdir mygit
git init
4、提交写的内容
git add readme.txt
git commit -m "add a readme file"
5、修改文件内容,再执行第四步
6、查看当前文件的状态 git status
7、若文件被修改过,用git diff 可以查看(在修改过未提交之前可以用这个命令查看)
8、查看修改日志 git log
忽略没有必要的信息 git log --pretty=online
9、回退版本
Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,
也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),
上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比
较容易数不过来,所以写成HEAD~100
回退上一版本 git reset --hard HEAD^
回退指定的版本 git reset --hard commit_id(前七位)
git在内部有个指向当前版本的HEAD指针
git reflog 记录你的每一次命令
10、介绍工作区和暂存区
工作区:能看的到的目录,.git是一个隐藏目录,不是工作区,而是Git的版本库
版本库:包括暂存区和分支master
git add 把文件添加进去,实际上就是把文件修改添加到暂存区
git commit 提交更改,实际上就是把暂存区的所有内容提交到当前分支
11、git管理的是修改,并不是文件
当你把把文件添加到暂存区,未提交之前再修改,提交之后发现并不是最终版本
原因是你没有把最后修改的文件给添加上去
12、撤销修改
1) 当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
2) 当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用
命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
3) 已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
13、删除文件
git rm filename
14、远程仓库
要关联一个远程库,使用命令git remote add origin https://www.github.com/zsjfenger/learngit.git
关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改
15、远程库的克隆
使用https除了速度慢意外,还有个最大的麻烦是每次推送都必须输入口令,但是默写只开放http
端口的公司内部就无法使用ssh协议而只能用https
1) git clone https://github.com/zsjfenger/gittest.git
2) git clone git@github.com:zsj/gittest.git
16、分支管理
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
17、解决冲突
当主分支master和新的分支都进行修改,提交合并发生冲突时,手动修改,并添加提交
查看分支合并图 git log --graph --pretty=oneline --abbrev-commit
18、分支管理
合并:git merge --no-ff -m "content" dev
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,
能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
19、强行删除分支 git branch -D feature-vulcan
20、多人协作
git pull 抓取远程最新的提交,如果抓取失败,可能是没有指定本地dev分支与远程origin/dev分支的链接,根据提示
,设置dev和origin/dev的链接:git branch --set-upstream dev origin/dev
并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
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 branch-name origin/branch-name。
21、标签
命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag -a <tagname> -m "blablabla..."可以指定标签信息;
git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;
命令git tag可以查看所有标签。
git show <tagname> 可以看到文字说明
命令git push origin <tagname>可以推送一个本地标签到;(远程)
命令git push origin --tags可以推送全部未推送过的本地标签;(远程)
命令git tag -d <tagname>可以删除一个本地标签;
命令git push origin :refs/tags/<tagname>可以删除一个远程标签。(先删除本地标签)