使用 Git和Github
CN丶Moti 人气:0本地库初始化
git init
效果:
注意: .git
目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡 乱修改。
设置签名
其实就是为了区分不同开发人员的身份需要设置一下自己的信息,包括用户名和密码,有两个级别:项目级别和系统用户级别
项目级别/仓库级别:仅在当前本地库范围内有效
# 为了区分这里的用户名加上后缀project的缩写 git config user.name moti_pro # 添加邮箱标签 git config user.email 1111@qq.com # 查看配置结果 cat .git/config
系统用户级别:登录当前操作系统的用户范围
# 添加系统用户名Git标签 git config --global user.name moti_glb # 添加系统用户邮箱Git标签 git config --global user.email 2222@qq.com # 查看配置结果 git config --list
级别优先级
- 就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名
- 如果只有系统用户级别的签名,就以系统用户级别的签名为准
- 二者必须有一个
基本操作
查看工作区、暂存区状态
git status
将工作区的“新建/修改”添加到暂存区
git add [file name]
将暂存区的内容提交到本地库
git commit -m "commit message" [file name]
新建一个文件先提交到暂存区,再提交到本地库
37367@Ī▒▒ MINGW64 /e/GitLearn/project1 (master) $ vim file1.txt 37367@Ī▒▒ MINGW64 /e/GitLearn/project1 (master) $ git add file1.txt warning: LF will be replaced by CRLF in file1.txt. The file will have its original line endings in your working directory. 37367@Ī▒▒ MINGW64 /e/GitLearn/project1 (master) $ git status On branch master Initial commit Changes to be committed: (use "git rm --cached …" to unstage) new file: file1.txt 37367@Ī▒▒ MINGW64 /e/GitLearn/project1 (master) $ git commit -m "第一次提交" file1.txt warning: LF will be replaced by CRLF in file1.txt. The file will have its original line endings in your working directory. [master (root-commit) f6bccb6] 第一次提交 warning: LF will be replaced by CRLF in file1.txt. The file will have its original line endings in your working directory. 1 file changed, 5 insertions(+) create mode 100644 file1.txt 37367@Ī▒▒ MINGW64 /e/GitLearn/project1 (master) $ git log commit f6bccb66ac527360ea69003524e499831e509e0b Author: moti_pro 1111@qq.com Date: Sun Dec 29 21:11:35 2019 +0800 第一次提交
查看日志
# 多屏显示控制方式: 空格向下翻页 b 向上翻页 q 退出 git log # 其他形式 git log --pretty=oneline git log --pretty=oneline git reflog
版本的前进后退
# 基于索引值操作[推荐] git reset --hard [局部索引值] git reset --hard a6ace91 # 使用^符号:只能后退 git reset --hard HEAD^ 注:一个^表示后退一步,n 个表示后退 n 步 # 使用~符号:只能后退 注:表示后退 n 步 git reset --hard HEAD~n
删除文件并找回
前提:删除前,文件存在时的状态提交到了本地库。
操作:git reset --hard [指针位置]
- 删除操作已经提交到本地库:指针位置指向历史记录ID
- 删除操作尚未提交到本地库:指针位置使用 HEAD
比较文件差异
# 将工作区中的文件和暂存区进行比较 git diff [文件名] # 将工作区中的文件和本地库历史记录比较 git diff [本地库中历史版本] [文件名] # 不带文件名比较多个文件 git diff
分支管理
# 创建分支 git branch [分支名] # 查看分支 git branch -v # 切换分支 git checkout [分支名]
新建second分支,并切换
合并分支
- 切换到接受修改的分支(被合并,增加新内容)上 。
git checkout [被合并分支名]
- 第二步:执行 merge 命令。
git merge [有新内容分支名]
解决冲突
冲突的表现
冲突的解决
- 编辑文件,删除特殊符号
- 把文件修改到满意的程度,保存退出
- git add [文件名]
- git commit -m “日志信息”
注意:此时 commit 一定不能带具体文件名
Git推送到GitHub
在本地的git上进行如下操作
- 创建远程库地址别名
# 查看当前所有远程地址别名 git remote -v # 添加地址别名 git remote add [别名] [远程地址]
- 推送
git push [地址别名] [分支名]
注意:如果是第一次提交的话需要GitHub的用户名和密码
- 克隆
在本机新建一个文件夹,然后进入,执行下面命令
git clone [上面复制的地址] # 注意这里也需要输入用户名和密码
可以看到,成功将github上的my_project克隆下来
效果
- 完整的把远程库下载到本地
- 创建 origin 远程地址别名
- 初始化本地库
- 团队成员邀请
输入对方github账号,对方会受到邀请邮件,确认后,对方就可以向这个仓库远程提交了。
- 拉取
# 拉取+合并 pull=fetch+merge # 拉取 git fetch [远程库地址别名] [远程分支名] # 合并 git merge [远程库地址别名/远程分支名] 拉取+合并 git pull [远程库地址别名] [远程分支名]
- 解决冲突
- 如果不是基于 GitHub 远程库的最新版所做的修改,不能推送,必须先拉 取。 先
Pull
,修改之后再Push
。 - 拉取下来后如果进入冲突状态,则按照“分支冲突解决”操作解决即可。
- 跨团队协作
之后在你的github仓库上就多出一个仓库
克隆到本地后,修改,然后再推送到自己账号里的仓库。
此时,修改的只是你自己账号里的仓库,最原始的仓库(你从别那里Fork的)并没有发生改变。这时候你需要如下操作
之后对方的账户会收到消息
点击这里可以看到修改的地方
- SSH 免密登录
- 进入当前用户的家目录
cd ~
- 删除.ssh 目录
rm -rvf .ssh
- 运行命令生成.ssh 密钥目录
ssh-keygen -t rsa -C [github账号的邮箱]
- 进入.ssh 目录查看文件列表
cd .ssh
- 查看 id_rsa.pub 文件内容
cat id_rsa.pub
- 复制 id_rsa.pub 文件内容,登录 GitHub,点击用户头像→Settings→SSH and GPG keys
- New SSH Key
- 输入复制的密钥信息
- 回到 Git bash 创建远程地址别名
git remote add [别名] [ssh方式的仓库链接]
- 推送文件进行测试
加载全部内容