找回密码
 注册
查看: 9304|回復: 0

[基础知识] git笔记

[複製鏈接]
aplmm 發表於 2020-3-30 22:40:53 | 顯示全部樓層 |閱讀模式
Git 是一个分布式版本控制软件,与CVS、Subversion一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。
1.设置用户名和邮箱
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
注意:git config 命令的--global 参数,用了这个参数,表示你这台机器上所有的 Git
版本库都会使用这个配置,当然也可以对某个版本库指定不同的用户名和 Email 地址
2.创建空的版本库(empty Git repository)
git init
3.添加文件到暂存区
git add <file>
4.推送到版本库
git commit -m <message>
5.初始化一个 Git 版本库,使用 git init 命令;
添加文件到 Git 版本库,分两步:
使用命令 git add <file>,注意,可反复多次使用,添加多个文件,实际上就是把文件
修改添加到暂存区;
使用命令 git commit -m <message>完成,实际上就是把暂存区的所有内容提交到当前
分支
6.查看版本库当前的状态
git status
7.查看当前文件与版本库记录的文件的差异
git diff <file>
也可以写成下面这样
git diff <commit id>/HEAD -- <file>
这样比较灵活
8.查看日志记录
git log
注意:嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline 参数
9.移动版本库的版本
git reset --hard HEAD^
上述语句为使版本库回退到上一个版本,上两个版本即 HEAD^^
也可以写成下面这样
git reset --hard HEAD~1
上两个版本即 HEAD~2
也可以指定版本库移动到某一个版本
git reset --hard <commit id>
<commit id>不用全部输入,只需要输入前 7 位即可
注意:在 windows 的 cmd 中,^是特殊符号,使用时需要用双引号包住,如"^"
10.查看版本库的命令执行历史
git reflog
11.HEAD 指向的版本就是当前版本,因此,Git 允许我们在版本的历史之间穿梭,使用命
令 git reset --hard <commit id>;
穿梭前,用 git log 可以查看提交历史,以便确定要回退到哪个版本;
要重返未来,用 git reflog 查看命令历史,以便确定要回到未来的哪个版本
12.为什么 Git 比其他版本控制系统设计得优秀,因为 Git 跟踪并管理的是修改,而非文

13.每次修改,如果不用 git add 到暂存区,那就不会加入到 git commit 中
14.复原工作区的修改
git checkout -- <file>
这里有两种情况:
一种是文件自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是文件已经添加到暂存区后,又作了修改,现在撤销修改就回到添加到暂存区后的状态;
总之,就是让这个文件回到最近一次 git commit 或 git add 时的状态;
命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令
15.把暂存区的修改回退到工作区,即将暂存区变回跟版本库一样,复原暂存区的修改
git reset <commit id>/HEAD <file>
16.场景 1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令 git
checkout -- <file>;
场景 2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两
步,第一步用命令 git reset HEAD <file>,就回到了场景 1,第二步按场景 1 操作;
场景 3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不
过前提是没有推送到远程库
17.删除版本库中的文件
git rm <file>
18.创建 SSH Key(在 windows 下需要打开 Git Bash)
ssh-keygen -t rsa -C "youremail@example.com"
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个 Key
也不是用于军事目的,所以也无需设置密码。如果一切顺利的话,可以在用户主目录里找到
ssh 目录,里面有 id_rsa 和 id_rsa.pub 两个文件,这两个就是 SSH Key 的秘钥对,
id_rsa 是私钥,不能泄露出去,id_rsa.pub 是公钥,可以放心地告诉任何人;
为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,
而不是别人冒充的,而 Git 支持 SSH 协议,所以,GitHub 只要知道了你的公钥,就可以
确认只有你自己才能推送
19.关联一个远程库
git remote add <origin name> git@server-name:path/repo-name.git
20.把本地库的内容推送到远程
git push <origin name> master
实际上是把当前分支 master 推送到远程,如果远程库是空的,我们第一次推送 master
分支时,加上了-u 参数,Git 不但会把本地的 master 分支内容推送的远程新的 master
分支,还会把本地的 master 分支和远程的 master 分支关联起来,在以后的推送或者拉
取时就可以简化命令,例如
git push -u <origin name> master
21.克隆远程库到本地
git clone <origin address>
Git 支持多种协议,包括 https,但通过 ssh 支持的原生 Git 协议速度最快
22.创建并切换分支
git checkout -b <branch name>
也可以分成两步走
创建分支
git branch <branch name>
切换分支
git checkout <branch name>
23.查看当前分支
git branch
git branch 命令会列出所有分支,当前分支前面会标一个*号
24.切换当前分支
git checkout <branch name>
25.合并指定分支到当前分支
git merge <branch name>
26.删除指定分支
git branch -d <branch name>
若分支没有被合并过,则
git branch -D <branch name>
27.当 Git 无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成;
解决冲突就是把 Git 合并失败的文件手动编辑为我们希望的内容,再提交
28.查看带分支合并的日志记录图
git log --graph --pretty=oneline --abbrev-commit
29.通常,合并分支时,如果可能,Git 会用 Fast forward 模式,但这种模式下,删除
分支后,会丢掉分支信息。如果要强制禁用 Fast forward 模式,Git 就会在 merge 时
生成一个新的 commit,这样,从分支历史上就可以看出分支信息
git merge --no-ff -m <message> <branch name>
合并分支时,加上--no-ff 参数就可以用普通模式合并,合并后的历史有分支,能看出来
曾经做过合并,而 fast forward 合并就看不出来曾经做过合并

您需要登錄後才可以回帖 登录 | 注册

本版積分規則

手机版|小黑屋|Linux公社论坛

GMT+8, 2025-6-6 06:02 , Processed in 0.062500 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表