原网址:Git教程 - 廖雪峰的官方网站
感谢廖师傅的开源
总指令合集:
1.安装git
windows:下载地址为 git-scm.com或者gitforwindows.org,或者阿里镜像(感谢星悸迷航同学)
2.创建版本库
安装git后打开git bash,用cd命令切换到合适的地方,新建一个文件夹
mkdir MyGit
cd MyGit
然后将这个文件夹变成版本库
git init
接下来就可以在MyGit中开始敲代码了
3.git add
git add test.txt
git add指令将会把工作区的内容添加到暂存区,在git中有工作区、暂存区、版本库的概念
4.git commit -m “注释”
git commit -m “本次修改了脑袋容易进水的bug”
git commit -m "注释"命令将会把暂存区的内容提交到版本库中,使用了这个命令就正式的提交了一次代码
5.git status指令
git status
git status命令将会显示出当前仓库的状态,比如什么文件被修改了还未提交
6.git diff 文件名
git diff test.txt
git diff指令会将文件的改动显示出来
7.git log
git log
git log --pretty=online
git log指令会显示出历史的提交记录,而加上参数--pretty=online会简化输出的信息
8.git reset
git reset --hard HARD^ //回到上个版本
HARD^表示回到上个版本 HARD^^表示回到上上个版本
也可写成HARD~100,表示回到100个版本前的那个版本
git reset命令用来回溯版本,使用此命令能回到之前的版本,回去之后再使用git log就能发现确实回退了一个版本。
想要回到最新的版本,也可以用git reset,只不过需要找到那个版本的commit id
git reset --hard 192f874624af38285c0a6e8c26b3954f2ea54011
或者git reset --hard 192f也可以
如果找不到commit id了怎么办,用git reflog命令找到commit id
9.git reflog
git reflog
git reflog 命令可以把之前自己使用过的命令显示出来,这些命令都带有commit id
10.工作区和版本库
工作区就是我们实际在撰写代码的区域,而版本库是git管理的仓库,这个仓库存放大家提交的代码,其中master 是大家的主线,工作区是自己的主线,git add将自己打完的副本添加到stage暂存区里面,确定要提交了再把暂存区里面的副本交给master,这就完成了一次正式的提交代码。
11.git diff HEAD -- 文件名
gir diff HEAD -- readme.txt
git diff HEAD -- 文件名 命令可以显示出自己工作区和版本库最新版本的区别
12.git checkout -- 文件名
git checkout -- readme.txt
git checkout -- 文件名 命令可以测回最近一次修改
如果修改文件但未add,则文件会撤销最近所作的修改
如果修改文件已经add,然后再修改文件的话,则文件会撤回到已经add但未修改的地方
一旦commit,则无法再进行撤回
13.git rm 文件名
git rm 文件名
删除文件,一般使用rm命令将文件删除。
我们删掉某个文件以后,使用git status,git会告诉我们与版本库相比,工作区少了一个文件,如果我们确实要删掉这个文件,那就使用git rm
git rm test.txt
然后再commit,这样这个文件就在版本库中彻底删除了。
如果我们不想删掉这个文件,只是误操作把工作区的文件删了,也没事,只要把版本库的文件拷回来就行
git checkout -- test.txt
这样就能把版本库中那个文件最新的版本拷贝回来,不过这会丢失删掉文件的进度
14.创建远程仓库
第1步:创建SSH Key
ssh-keygen -t rsa -C "youremail@exexample.com"
然后在用户主目录里找到.ssh目录,id_rsa是私钥,不能泄露,id_rsa.pub是公钥,可以给别人
第2步:登入GitHub,打开“Account settings”的“SSH Keys”
然后点“Add SSH Key”,填上任意Title,在Key文本框里面粘贴id_rsa.pub文件的内容, 再点“Add Key”就能添加Key了。Key 的作用是让GitHub确认提交代码的是你。
第3步:在GitHub创建一个仓库并将本地库与其关联
在GitHub页面右上角Create a new repo按钮,创建一个新仓库
回到Git bash,输入命令:
git remote add origin git@github.com:自己GitHub账号的名称/刚才起的仓库名称.git
将本地库的所有内容推送到远程库上
git push -u origin master
推送成功后即可在GitHub的仓库上看到更新内容
15.git push origin master
git push origin master
git push origin master命令用来将本地库推送到远程库上,这样就可以真正的使用GitHub来管理版本了
推送master可以将该分支上的所有本地提交到远程库,当我们不需要提交所有本地,只需要提交某些分支时,也可以指定推送某个分支:
git push origin 分支名称
16.git remote -v
git remote -v
git remote -v命令用来查看远程库信息
git remote 命令则简略显示远程库信息
17.git remote rm origin
git remote rm origin
git remote rm origin命令用来解除本地和远程的绑定关系,解除后就无法再推送或克隆远程库了
18.git clone
git clone git@github.com:自己GitHub账号的名称/远程库的名称.git
git clone命令用来克隆远程库到本地库
19.分支管理
在日常开发中,master线用来发布新版本或稳定版本,很少改动,一般开发是用dev线,每个员工从dev线上取出最新版本然后自己在开一个分支进行自己的开发,开发完成后再提交到dev线上,图中可以看到迈克michoel从dev上克隆了版本并进行开发,而鲍勃bob同时也可以从dev上获取版本并开发,这样就不会互相影响了并且也能很好的控制版本。
20.git checkout -b 分支名称
git checkout -b dev
-b的参数表示创建并切换,相当于以下两条命令
git branch dev
git checkout dev
git checkout -b 分支名称 命令用来创建新分支并切换到这个分支上
想要再切回到master线,就使用git checkout master
21.git branch
git branch
git branch命令用来查看当前分支
22. git branch -d 分支名称
git branch -d dev
用来删除指定的分支,一般是将dev分支合并到master后,如果要将分支删掉就可以用此命令
23.git merge 分支名称
git merge dev
git merge命令用于合并指定分支到当前分支,通常先切换到master线,再使用此命令将dev分支与master主线合并
24.git switch 分支名称
git switch dev
git switch 分支名称也可以用来切换分支,较新的版本支持此指令
创建并切换到新的dev分支,可以用:
git switch -c dev
25.解决合并冲突
Git无法自动合并分支时,需要我们手动解决冲突,然后再提交,才能合并完成。
使用 git merge 分支名称 后,如果产生冲突,我们先 git status 查看冲突内容,然后查看并修改相关文件,再次提交merge即可。用带参数的 git log --graph --pretty=oneline --abbrev-commit 也能查看分支的合并情况。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
26.git stash
git stash
git stash命令可以创建临时工作区,当突然有bug出现,需要及时解决时,我们不想丢弃当前的任务进度,但是不得不去解决bug,这时就可以使用此指令创建一个临时工作区,我们在这个临时工作区中把bug解决了就可以再回到我们原来的任务上,类似单片机中的中断处理函数。
切换到新的临时工作区后,比如说是master出现了bug,那么需要创建一个bug分支继承master的bug,然后在这个bug分支上修改bug,修完后合并到master中,再删除这个bug分支。
临时工作区的任务完成后,就可以返回原来的工作区继续刚才没做完的任务:
git stash list //查看工作现场列表
git stash apply //恢复到原始工作区,但stash内容并不删除,需要再使用 git stash drop删除
git stash pop //恢复的同时也把stash内容也删除了
可以多次使用git stash 创建很多个临时工作区
git stash apply stash@{0} //恢复到指定的工作区,其中的stash@{0}参数是指定的工作区
27.git cherry -pick <commit id>
git cherry -pick 1d4b803
git cherry -pick <commit id>命令可以复制一个特定的commit提交到当前分支
比如当我们通过git stash修复了master的bug后,发现dev也有同意的bug,就可以switch到dev分支,再使用此指令将dev分支的bug修复,避免了重复劳动。
28.git branch -D 分支名称
git branch -D feature
如果在开发过程中突然冒出来一个新需求,最好新建一个分支,以防甲方后悔,如果要丢弃一个没有被合并过的分支,可以通过git branch -D 分支名称 强行删除
29.多人协作工作的模式
(1)首先,使用git push origin 分支名称推送自己的修改
(2)如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并
(3)如果合并有冲突,则解决冲突,并在本地提交
(4)如果没有冲突或解决掉冲突后,再用git push origin 分支名称 推送就能成功
如果git pull 提示 on trackong information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to 分支名称 origin/分支名称
30.git rebase
git rebase
变基,将分叉的提交历史整理成一条支线,看上去更直观。缺点是本地的分支提交已经被修改过了。变基后再通过push把本地分支推送到远程,看起来就直观了。
31.标签管理
标签是用来命名分支的,将分支命名以便查看版本,比如给future分支打上v1.23的标签,方便查看罢了。
要给谁打标签就先switch到上面,然后敲命令:git tag 标签名
git tag v1.23
这样就把该分支命名成了版本名
也可以创建带有说明的标签,用-a指定标签名,-m指定说明文字
git tag -a v2.34 -m "这是V2.34的详细说明"
使用 git tag 查看所有的标签:
git tag
也可以指定给某个commit打标签:git tag v0.9 提交id
git tag v0.9 f52c633
注意:标签不是按照时间顺序列出,而是按照字母排序的,使用git tag 标签名称 查看标签信息,使用 git show 标签名称 查看文字说明
git tag v0.9 //查看标签信息
git show v0.9 //查看文字说明
删除标签用指令:git tag -d 标签名称 在本地能轻松删除标签
git tag -d v0.1
通常加上了标签后会通过git push origin v0.1或git push origin --tags将标签推送至远程库,当在本地删除标签后也要推送到远程库,使用命令git push origin : refs/tags/标签名称 来删除远程库的标签。
git push origin : refs/tags/v0.1
32.图形化git
Source Tree,是一个git图形化界面工具,以更加直观的方式进行git操作。