SSH key 及 配置信息
设置 Git 的 user name 和 email:
- $ Git config --global user.name "user name"
- $ Git config --global user.email "email"
生成 SSH 密钥过程:
1. 查看是否已经有了 SSH 密钥: cd ~/.SSH
如果没有密钥则不会有此文件夹, 有则备份删除
2. 生存密钥:$ SSH-keygen -t rsa -C "邮箱"
按 3 个回车, 密码为空
. 在 GitHub 上添加 SSH 密钥, 这要添加的是 "id_rsa.pub" 里面的公钥
本地初始化一个目录为代码仓库
Git init 初始化仓库
1, 创建一个新目录作为代码仓库
2, 执行 Git init;
执行之后会发现多了一个. Git 目录
这就说明仓库已经初始完成
3, 在 GitHub 上创建一个新的代码仓库 (创建对应的代码仓库)
4,Git remote add origin [email protected]:memoryqiu/memory2017.Git
5, 正常提交代码即可.
克隆一个项目
https 速度慢, 需要输入账号和密码 / SSH 会被公司限制 两种协议
要克隆一个仓库, 首先必须知道仓库的地址, 后使用 Git clone 命令克隆然.
Git clone [email protected]:michaelliao/gitskills.Git
Git 支持多种协议, 包括 https, 但通过 SSH 支持的原生 Git 协议速度最快.
- Git clone https://github.com/memoryqiu/memory2019.git
- or
- Git clone [email protected]:memoryqiu/memory2019.Git
通常推荐大家直接 Git clone 一个项目的方式来创建本地的代码仓库!
演示一下在 GitHub 上如何创建一个代码仓库!!!
创建分支
Git 鼓励大量使用分支:
创建分支: Git branch <name> (默认当前所在分支为基础分支, 可以指定其它分支)
切换分支: Git checkout <name>
创建 + 切换分支: Git checkout -b <name> < 基础分支名称 >(origin/master)
提交刚创建的分支: Git push origin branch-name
更新分支: Git pull origin branchname or Git fetch origin branchname Git merge --no-ff 目标分支
合并某分支到当前分支: Git merge --no-ff <branch1 分支名称 >(把分支 branch1 合并到当前分支上)
Git merege (fast forward and --no-ff )
通常, 合并分支时, 如果可能, Git 会用 Fast forward 模式, 但这种模式下, 删除分支后, 会丢掉分支信息.
如果要强制禁用 Fast forward 模式, Git 就会在 merge 时生成一个新的 commit, 这样, 从分支历史上就可以看出分支信息
请注意 --no-ff 参数, 表示禁用 Fast forward 请注意 --no-ff 参数, 表示禁用 Fast forward
Git merge --no-ff -m "merge with no-ff" dev
因为本次合并要创建一个新的 commit, 所以加上 - m 参数, 把 commit 描述写进去
查看本地分支: Git branch or Git branch -l
查看远程分支: Git branch -r
查看所有分支 (本地 + 远程):Git branch -a
带 * 的分支为当前工作的分支
删除本地分支:
- Git branch -d branchnamne
- or
Git branch -D branchname 强制删除
删除远程分支:
- Git push origin --delete branchname (删除远端分支 branchname)
- Git push origin :branchname (直接删除远端分支 branchname)
获取远程仓库的分支 (本地没有的分支)
Git pull origin $branch:$branch
实例: Git pull origin branchname:branchname
############Git commit####################
Git commit -m'' 只会提交已经 Git add 过的文件 (包括新增, 修改, 删除等所有修改操作)
Git commit -a -m'' 会提交除新增未 add 的文件之外的所有修改操作
#############Git diff ####################
Git diff filename 显示本地文件修改的内容同版本库的差别
Git diff branchone branchtwo 对比两个 branch 不同之处
Git diff tagone tagtwo 对比两个 tag 不同之处
######## 删除文件 ###########
在本地直接删除文件
- ,rm file (工作区中文件删除)
- ,Git add file (文件删除的状态添加到暂存区中)
- ,Git commit (提交文件删除的状态到本地的版本库中)
以上三步可以缩减为两步:
- 1,Git rm file (直接把删除的文件添加到暂存区中)
- 2,Git commit (提交文件删除的状态到本地的版本库中)
- ############# 删除文件 ###############
1,Git rm filename 然后 Git commit 即可
2,rm filename / Git add / Git commit
Git rm filename 就是 rm filename 的简化版
- ######## 查看当前工作区修改状态 #######
- Git status;
要随时掌握工作区的状态,
使用 Git status 命令
如果 Git status 告诉你有文件被修改过,
用 Git diff 可以查看修改内容.
Git diff 默认查看所有被修改过的文件 (不包括新增未 add 的文件)
- Git diff filename (查看具体某个文件的修改内容 )
- ########### 查看 log 记录 #####
Git log 默认列出之前提交过记录 (根据提交时间由近到远排列)
Git log -n 列出指定提交次数的记录
Git log --pretty=oneline 列出简单记录信息 (commitid 和 提交注释)
Git reflog -n 查看指定次数的提交操作的记录信息 (commitid)
log and reflog
两者都是查看所有的 commit 操作的记录, log 查看不到 reset 回退时跳过的 commit 操作的 commitid
- (可以夸版本回退一次, 进行实际演示)
- Git log
- Git reflog
- Git reset --hard commitid
- Git log
- Git reflog
Git log --graph 可以查看分支合并图
######### 撤回和回滚 #######
1, 在工作区内修改了文件但没有提交到暂存区撤销所有修改:
Git checkout -- file.name 可以丢弃工作区的修改 , 只针对已跟踪的文件
Git checkout -- file 命令中的 -- 很重要, 没有 --, 就变成了 "切换到另一个分支" 的命令
2, 文件已经添加到暂存区撤回:
- Git reset HEAD file
- or
- Git rm --cached filename
3, 文件已经提交到了本地的版本库且未推向远端的版本库中:
- Git reset --hard HEAD~n
- or
- Git reset --hard commitid(推荐)
HEAD 表示提交的最新版本. HEAD^ 表示上一个版本, HEAD^^ 表示上上个版本. HEAD~100 表示往上 100 个版本.
(上两个版本 HEAD~2)
4, 文件已经从本地仓库推倒远程仓库的回退
Git log or Git reflog 找到目标版本
- Git reset --hard commitid
- Git push -f origin master (-f 参数是强制覆盖的意思, 没有该参数会推送失败, 因为远程仓库的版本高于当前版本)
- Git revert commitid
Git revert 是生成一个新的提交来撤销某次提交, 此次提交之前的 commit 都会被保留
Git reset 是回到某次提交, 提交及之前的 commit 都会被保留, 但是此次之后的修改都会被退回到暂存区
团队开发时, 版本回退一定要通知其他人员! 如果其他同事在每次提交前没有先更细后提交的意识或习惯的话, 回退是白费功夫.
- http://yijiebuyi.com/blog/8f985d539566d0bf3b804df6be4e0c90.html
- ###################### 状态冻结 ####################
Git stash 冻结当前修改状态
Git stash list 列出总结列表
Git stash pop 可以按版本恢复某个冻结状态并删除
Git stash apply 只是按某个版本恢复某个冻结状态不删除
Git stash drop 删除指定某个冻结状态
####################tag 管理 #####################
创建 tag:
Git tag -a tagname -m "添加 tag 的描述信息" (tag 要有个规则标识例如: feature_abc_v1.1 , 给当前分支打一个 tag 名为 tagname)
命令 Git tag <name> 用于新建一个标签, 默认为 HEAD, 也可以指定一个 commit id;
提交创建的 tag:
Git push origin tagname (同提交分支操作一样)
命令 Git tag 可以查看所有标签.
查看 tag:
- Git tag
- or
- Git tag -l
查看标签的具体信息:
- Git show tag-name
- Git tag -d tagname (本地删除)
- Git push orign (空格):refs/tags/tagname (把删除的 tag 提交到远端)
- Git tag -d v0.9
- Git push origin :refs/tags/v0.9
- Git fetch origin tag $tag
- ########## 同远程仓库关联 #########
- Git rm -r --cached .
- Git add .
- Git commit -m 'update .gitignore'
来源: http://www.bubuko.com/infodetail-3035004.html