Gitee
没有记录(比较简单),Git
搭建服务器也没有记录(还不太会玩linux
,有错误发出来对大家就不好啦)-
有个
SourceTree
的软件可以帮助你更好的操作git
- 这个软件添加
ssh
是在 工具 -> 选项 里面添加openSSH
- 这个软件添加
正文
命令
- 命令集合参考
安装、配置、查看相关
- 查看
git
版本
git version
- 配置所有
git
仓库
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
- 查看已配置的所有设置
git config --list
几个基本的命令
- 一个文件夹变为库
git init
- 添加文件到库中(版本库的暂存区)
- 可以添加很多最后再提交
git add 文件名 //这里文件后缀加了就要求要准确,不加不冲突就行了
git add . //添加全部文件
- 提交到
Git
(当前分支分支)
git commit -m "描述语句,最好不要省略"
版本、管理文件、区域理解
- 查看当前库与之前库的区别(也叫查看当前状态)
- 工作区、暂存区的状态,主要应该为工作区的状态,这里理解不是很透彻
git status
- 查看具体的不同
git diff 文件名
- 查看提交日志
- 查看完后,按一下
q
即可退出日志查看状态
- 查看完后,按一下
git log //加上 --pretty=oneline 使内容更加的简洁
git log --graph --pretty=oneline --abbrev-commit // 这样还可以看见提交的描述语句
- 版本跳转
git reset --hard HEAD^ //回到上一个版本
git reset --hard 版本号 //版本号就是commit id,只需要前几位即可
- 查看每一次命令(commit id)
git reflog
- 丢弃工作区的修改(恢复到上一次修改)
git checkout -- 文件名
- 撤销掉暂存区的修改
// 修改已经被添加到了暂存区,需要结合上一步命令才能丢弃修改
git reset HEAD 文件名
- 删除工作区的文件
//想要恢复可以使用:git checkout -- 文件名 来恢复,实际上是将版本库中的文件恢复到了工作区,那么,如果版本库中没有该文件(在删除之前都没有执行 add 操作),就不能恢复了
rm 文件名
远程仓库(GitHub)
- 关联到远程仓库
github
中- 这一步是两个仓库的关联
//前提:github 与 本库都有一个库,需要将两个库关联起来
git remote add origin [email protected]:GitHub用户名/版本库名.git //其中 origin 为 git 默认的远程库名字,当然也可以用自己想的
- 推送内容到远程仓库,并将本地 master 分支与远程 master 分支关联
- 将本地 当前分支 master 推送到 远程仓库
- 也可以推送其他分支到远程库中
- 推送失败,说明有冲突,先拉下来解决了之后再push
git push -u origin master //其中,-u参数在第一次推送时使用即可,表示将两个分支关联起来
git push origin master //第一次推送之后,就可以省略 -u参数了
- 从远程库克隆
// 这里默认用的是 ssh 协议,当然也可以直接使用 url,url使用的为 https 协议
// 后面那一串在 github 版本库中的 Clone or download 按钮那里可以复制
git clone [email protected]: GitHub用户名/版本库名.git
- 查看远程库信息
git remote // 只能查看远程库在本地的名字:origin(默认)
git rmote -v // 可以查看抓取和推送的地址,如果没有权限查看不到推送的地址
- 合作项目,先
fork
过来,然后在自己主页clone
下来,工作完成之后,在推到自己主页,然后在pull request
即可
分支管理
- 创建分支
git branch 分支名
- 切换分支
git checkout 分支名 //git switch 分支名 为2.23之后版本使用的
- 创建并切换分支
git checkout -b 分支名 //git switch -c 分支名 为2.23之后版本使用的
- 查看分支
git branch //得到的带 * 号的为当前分支
- 合并分支
- 合并指定分支到当前分支
git merge 要合并的分支名 //如果没有发生冲突,那么就是快速合并模式,是没有提交记录的
//可以通过添加 --no-ff 参数来禁止快速合并模式,使用普通合并模式,这样可以通过 log 查看提交记录
git merge --no-ff -m "描述语句" 要合并的分支名
- 删除分支
//要删除多个直接在后面写上分支名即可,要切换到其他分支才能删除另外的分支,不能在自己分支上进行删除自己的操作
git branch -d 分支名1 分支名2 分支名3
// 删除没有被合并的分支,使用上面的命令不会成功的
// 需要使用 -D 参数来强行删除
git branch -D 分支名
- “储藏” 工作现场
git stash // 这样你在当前分支上修改的文件,添加的文件都会被储藏起来,并且这时当前的工作区是十分干净的,没有你之前在分支上的修改
- 查看储藏的工作现场有哪些
git stash lis // 查看到的记录 有 stash 号,可以用于后续指定恢复哪一个工作现场
- 恢复工作现场
git stash apply // 但是stach 内容不会被删除
git stash drop // 删除 stash 内容
git stash pop // 恢复并删除 stash 内容
git stash apply stash{0} // 恢复指定的 stash,这里是 stash{0}
- 复制一个修改提交
git cherry-pick 该修改的 commitId 号 // 只复制一个修改,跟 merge 不同
- “拉” 版本库来更新本地版本库
- 在
push
之前先pull
一下,保证与远程库没有冲突之后再push
- 在
//如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/。
git pull
- 在本地创建和远程分支对应的分支(创建分支,并连接起来)
- 远程库上有多个分支,但是你克隆下来只能看到一个主分支,这时候就需要使用这一步来创建分支并建立连接了
- 注意与下一个命令的区别
git checkout -b 分支名 origin/分支名 //origin为远程库在本地的名字,根据你设置的来定,默认为origin
- 建立本地分支与远程分支的连接
- 注意与上一个命令区别
//如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,就要使用下面的命令了
git branch --set-upstream-to 分支名 origin/分支名
- 把本地未push的分叉提交历史整理成直线;
-
rebase
的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比
-
git rebase // 然后使用 git log --graph --pretty=oneline --abbrev-commit 进行查看提交日志
标签
- 给提交添加标签
- 创建的标签都存在本地
git tag 标签名 // 默认在当前分支最新的提交上(HEAD)
git tag 标签名 commitId // 给指定我提交打上标签
git tag -a 标签名 -m "描述性语句" commitId // 与上面的一样的
- 查看所有标签
git tag
- 查看标签的对应的提交信息
git show 标签名
- 共享标签
git push origin 标签名 //默认push是不是推送标签的,指定一下就可以了
git push origin --tags //推送全部的tag
- 删除标签
git tag -d 标签名 //本地
git push origin --delete 标签名 //删除远程库中的标签
git push origin :refs/tags/标签名 //和上一条命令一样的效果
其他
- 使
git
显示不同的颜色
git config --global color.ui true
- 忽略文件
- 让
git
进行提交时自动忽略掉一些文件,不提醒untrack file···
,这些文件不会被添加到版本库中
- 让
// 注意 .gitignore 文件本身是需要加入到版本库中的
创建一个文件,将想要忽略的文件名(有后缀加上后缀)写在这个文件里面,然后将这个文件保存并命名为:.gitignore
- 强制添加被忽略的文件到版本库中
.gitignore
文件模板合集
git add -f 文件名
- 检查
.gitignore
文件所存在的问题
git check-ignore -v 被忽略的文件名
- 给命令设置别名,更快捷的操作
- 删除别名,可以在
.git
的config
配置文件中直接删除即可。修改当然也可以
- 删除别名,可以在
git config --global alias.别名 "命令" //设置好以后就可以使用 git 别名 来达到相同的效果了
知识
- 记录部分重要的知识点
1. 使用 git log 查看日志的时候,得到的 一串十六进制表示的数字为:commit id(只有每次提交commit时,git都会计算出来一个id号)
2. 版本记录:HEAD^:上一个版本,HEAD^^:上上一个版本,HEAD~100:往上100个版本 // 要调到指定版本需要使用版本号:只需要前面几位就行了(5,6,7位)
3. git内部有一个指向当前版本的HEAD指针,进行版本跳转时,实际上就是将指针指向指定版本,然后再更新数据即可
4. 一个文件夹中除开 .git 文件其他的都是属于工作区,.git 文件为版本库,其中重要的为: 暂存区(stage/index),还有个东西叫分支,默认有一个 master 主分支,有一个 HEAD 指针指向master。通过 add 了之后文件就添加到了版本库中的暂存区了,commit之后就提交到了分支中。
5. Git 跟踪的是修改,而不是文件,这样理解:
修改一个文件 -> git add -> 再修改一次该文件 -> git commit
修改一个文件 -> git add -> 再修改一次该文件 -> git add -> git commit
如果 git 跟踪的是文件,那么第一行操作过后,工作区就没有东西了,但事实是 git status 查看得到的是 Changes not staged for commit (提交时改变没有被暂存);而第二行操作过后,所有的修改都被添加到了暂存区中,这时候工作区已经十分干净了,所以说 Git 跟踪的是修改,而非文件
6. git 支持很多协议,如:https、ssh等。https 协议较慢,ssh 较快,默认是ssh
7. HEAD 指针是指向分支的,分支就相当于时间线,记录时间线上的修改。在一个分支上提交的修改在另外一个分支上是看不见的,这样更安全一些。当然,要是你没有指向add、commit操作,切换回来是可以看见文件的修改的,因为这就相当于手动修改文件一样,文件的修改并没有被添加到版本库中
8. 快速合并模式(Fast forward):只有一个分支对文件进行了修改,合并时。直接修改 HEAD 指针到一个分支就合并完成了,很快速。合并冲突发生时将不再是快速合并。
但是快速合并模式下,合并不会被提交,不会有记录。可以通过 --no-ff 参数来禁止快速合并模式
9. 合并冲突:不同的分支都对同一个文件进行了修改,在这两个文件合并时就会产生冲突。git status 可以告诉我们冲突的文件是哪个,然后我们对文件进行修改之后提交即可
10. 配置文件都在 `.git` 目录下的 `config` 文件中
注意
- 第一次将
git
与github
连接起来的时候要添加SSH
密匙到github
中,不然推送不会成功。具体方法网上一收就有 - 在
git bush
中复制操作使用鼠标右击来完成,不要ctrl c
项目基本操作
- 在
github
上创建一个版本库,然后邀请其他项目成员加入到该项目 -
clone
项目,就可以开始编写你的代码啦 - 编写完之后,准备
push
之前,先pull
一遍项目,如果有冲突则解决 - 解决冲突完之后,
add
加入版本库,然后commit
提交修改,最后push
即可
新版本命令改变
// 从暂存区恢复工作区
git resotre --worktree readme.txt
// 从master恢复暂存区
git restore --staged readme.txt
// 从master同时恢复工作区和暂存区
git restore --source=HEAD --staged --worktree readme.txt
其他命令
// 切换目录
cd 目录
// 查看目录下的文件
ls