Git学习笔记01--常用Git命令、cmd命令及Git总结性知识
第二次学习廖雪峰老师的Git教程,学习过程中把教程中涉及到的Git命令及总结性知识记录下来方便二次复习。
-
所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文本文件、网页、程序代码等等,版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“hello”,在第8行删了一个单词‘’‘world’。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但是没办法跟踪文件的变化,只能把二进制文件每次的改变串起来,也就是只知道图片从100KB变成了120KB,但是到底改变了什么,版本控制系统无法知道。
-
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交,合并完成
-
通常,合并分支时,如果可能,Git会用
Fast forward
模式,但这种模式下,删除分支后会丢掉分支信息。如果要强制禁用Fast forward
模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息 -
多人协作的模式
-
首先,可以试图用
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工作区的根目录下创建一个特殊的
.gitignore
文件,然后把要忽略的文件名填写进去,Git就会自动忽略这些文件
Git命令
-
git init
把当前目录变成Git可以管理的仓库-
注意:Git在当前目录下自动创建
.git
目录,用来跟踪管理版本库,随意更改会破坏Git仓库。
-
-
git add 文件名
把文件添加到暂存区-
如
git add hello.txt
-
-
git commit -m 本次提交的说明
把暂存区的所有内容提交到当前分支-
-m
暂存区 -
本次提交的说明
理论上可以是任何内容,但最好是有意义的内容,方便从历史记录中找到改动记录 -
如
git commit -m "add new words"
-
-
git status
查看仓库当前的状态 -
git diff
查看文件修改前后的不同-
显示的格式为Unix通用的diff格式
-
-
git log
显示从最近到最远的提交日志-
显示结果中出现的类似
db376e1...
的是经SHA1计算,用十六进制表示的commit-id
(版本号) -
git log --pretty=oneline
添加参数简化输出信息 -
git log --graph
显示分支合并图 -
输入
q
退出
-
-
git reset
版本回退-
git reset --hard commit-id
-
版本号可以不写全,写到具有区分度的前几位就可以,如一共有两个版本号
a1253f...
和a135ed...
,则写到前3位就可以
-
-
git reset --hard HEAD^
-
HEAD
表示当前版本 -
HEAD
后面加几个^
就表示往上几个版本,如HEAD^
表示往上一个版本 -
HEAD
后面加~数字n
表示往上n个版本,如HEAD~100
表示往上100个版本
-
-
注意:因为在
cmd
中^
是转义符号,相当于Linux中的\
,当出现在行尾的时候含义是这行还没写完,无视行尾的换行符,下行的内容实际执行的时候理解为直接接在上一行尾,所以^
结尾的时候提示More?
,就是提示输入下一行的内容,不输入则会报错。解决方法有两个,一是用双引号包裹,强行指定为字符串内容"^"
,二是输入双倍的^
,如^^
,前一个转义后一个,代表一个没有特殊含义的字符^
本身。
-
-
git reflog
记录操作过的每一次命令 -
git checkout -- 文件名
把该文件在工作区的修改全部撤销-
如果文件自修改后还没有被放到暂存区,那么撤销后就回到和版本库一模一样的状态
-
如果文件添加到暂存区后,又作了修改,那么撤销后就回到添加到暂存区后的状态
-
总之,就是让这个文件回到最近一次
git commit
或git add
时的状态 -
命令中的
--
很重要,没有--
,就变成了“切换到另一个分支”的命令
-
-
git rm
删除文件-
如果一个文件已经被提交到版本库,那么永远不用担心误删,但是要小心,只能恢复文件到最新版本,会丢失最近一次提交后修改的内容
-
注意:从来没有被添加到版本库就被删除的文件,是无法恢复的
-
-
git remote add origin git@server-name:path/repo-name.git
关联远程仓库-
如使用GitHub,
server-name
就是github.com
,path
就是账户名,repo-name
就是仓库名
-
-
git remote
查看远程仓库信息-
git remote -v
显示更详细的信息
-
-
git push
把本地仓库的内容推送到远程仓库,实际上是把当前分支master
推送到远程仓库-
由于新建的远程仓库是空的,第一次推送
master
分支时,加上-u
参数,Git不但会把本地的master
分支内容推送到远程仓库新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令
-
-
git pull
把远程仓库内容拉取到本地仓库 -
git clone
克隆远程仓库到本地-
Git支持多种协议,默认的
git://
使用ssh
协议,也可以使用https
等其它协议 -
使用
ssh
,完整命令为git clone git@github.com:user-name/repo-name.git
-
使用
https
,完整命令为git clone https://github.com/user-name/repo-name.git
-
使用
https
速度慢,且每次推送都必须输入口令,但在只开放http
端口的公司内部就只能使用https
-
-
git branch xxx
创建xxx
分支 -
git branch
列出所有分支,在当前分支前标注*
号 -
git branch -d xxx
删除xxx
分支 -
git branch -D xxx
强行删除还未被合并的xxx
分支 -
git checkout xxx
切换到xxx
分支 -
git checkout -b xxx
创建并切换到xxx
分支 -
git switch xxx
切换到xxx
分支-
git switch -c xxx
创建并切换到xxx
分支
-
-
git merge xxx
合并xxx
分支到当前分支 -
git merge --no-ff
表示禁用Fast forword
模式 -
git stash
封存当前工作现场 -
git stash list
查看所有保存的工作现场 -
git stash apply
恢复封存的工作现场 -
git stash drop
恢复工作现场后,删除对应stash内容 -
git stash pop
恢复工作现场的同时,删除对应stash内容 -
git stash apply stash@{数字n}
恢复数字n对应的工作现场 -
git cherry-pick commit-id
复制一个特定的提交到当前分支-
Git自动给当前分支做了一次提交,注意这次提交的commit不同于复制的提交,只是两者改动相同
-
-
git tag
查看所有标签-
标签不是按时间顺序列出,而是按字母顺序列出
-
标签总是和某个
commit
挂钩,如果这个commit
既出现在master
分支,又出现在dev
分支,那么在这两个分支上都能看到这个标签
-
-
git tag xxx
给当前所在分支打上xxx
标签-
标签默认打在最新提交的
commit
上,可以用git tag xxx commit-id
给指定提交打标签 -
可以创建带有说明的标签,用
-a
指定标签名,用-m
指定说明文字,如git tag -a v1.0 -m "version 0.1 released" commit-id
-
创建的标签都存储在本地,不会自动推送到远程,所以,打错的标签可以在本地安全删除
-
-
git tag -d xxx
删除本地xxx
标签-
如果标签已经推送到远程,要删除远程标签需要先本地删除,然后从远程删除,命令格式为
git push origin :refs/tags/v0.9
,可以登录GitHub查看是否成功删除远程标签
-
-
git show xxx
查看xxx
标签的信息 -
git push origin xxx
将xxx
标签推送到远程 -
git push origin --tags
一次性推送全部尚未推送到远程的本地标签 -
git config --global alias.x xxx
将x
设置为xxx
的别名
cmd命令
-
cd
切换目录 -
md
新建文件夹 -
mkdir
新建文件夹 -
dir
查看文件夹 -
rd
删除文件夹 -
type nul>
新建文件 -
type
查看文件内容 -
del
删除文件