git基础命令整理
本地仓库操作
git init
#新建 git 仓库目录
git 只能跟踪文本文件,不能很好地控制二进制文件的版本变化。
文件改动后:
git add filename
#可多次使用多次提交
git commit -m "note about this change"
#最后一期提交
git status
#查看状态
git diff filename
#查看文件差异
多次改变后
git log
#查看提交日志 --pretty=oneline 参数可以把结果显示在一行,结果中有每一次 commit 的版本号和 note 信息。
版本回退
git reset --hard head^
#head^ ^的个数表示前几个版本。较多时用 head~100 的形式表示
git reset --hard commitid
#或者直接用 commitid 回退版本
版本前进
git reflog
#所有命令操作,可以看到倒退版本之前原始版本的 commitid 从而用 reset 前进版本
重要概念:暂存区,add 操作将文件变动加入到暂存区,之后 commit 时会将暂存区的变动提交。如果未用 add 而直接 commit,并不会提交文件的修改。
撤销还未 add 的修改
git checkout -- filename
#使文件回到最近一次 add 或 commit 时的状态
撤销已经 add 的修改
git reset head filename
#将暂存区的修改放弃
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file
,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库
删除文件
git rm
#工作区删除文件后 rm 一下再 commit 即可在版本库删除文件。
github 远程仓库操作
github ssh key 设置
-
ssh-keygen -t rsa -C "youremail@example.com" #生成秘钥对儿,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对。 #id_rsa是私钥,不能泄露出去。 #id_rsa.pub是公钥,可以放心地告诉任何人。
-
在 github 将公钥输入,以后即可使用有私钥的电脑提交
本地已有仓库关联远程仓库,首次 push,后续 push
git remote add origin https://github.com/*******/%%%%%%%.git
# ****为用户名 %%%%%为仓库名
git push -u origin master
# 首次 push 带上 -u 参数,进行本地和远程分支的关联
git push origin master
# 以后每次 push
远程仓库先建好,然后 clone
git clone git@github.com:******/%%%%%%%%.git
分支管理
一般操作
git checkout -b name
#建立分支,同时切换到分支
git branch
#查看当前分支
git checkout name
#切换分支
git merge name
#将 name 分支合并到当前所在分支上,默认使用的是 fast forward 模式
git branch -d name
# 删除分支
#Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。
merge 冲突
分支合并时如果存在冲突,需要手动修改文件内容后再次合并
使用非 fast 模式合并分支
git merge --no-ff -m "note" name
区别:fast 模式直接移动指针到被合并分支上,而禁用该模式后,将 commit 一次,相当于生成一个新的公共点,将两个分支合并在这个公共点上。
分支策略
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master
分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev
分支上,也就是说,dev
分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev
分支合并到master
上,在master
分支发布1.0版本;
你和你的小伙伴们每个人都在dev
分支上干活,每个人都有自己的分支,时不时地往dev
分支上合并就可以了。
删除未 merge 过的分支
git branch -D name
封存与解封工作区状态
git stash
#封存
git stash list
# 查看封存状态
git stash apply stash@{0}
# 恢复
git stash drop
# 删除封存状态
与远程仓库交互(多人协作)
git remote -v
# 显示当前可做的操作
git push origin name
# 将 name 分支推送到远程仓库
# 默认从远程仓库 clone 回来的仓库只有 master 分支
git checkout -b dev origin/dev
#在本地创建分支,拉取远程分支
git branch --set-upstream dev origin/dev
# 同理,设置 pull 的本地远程分支对应关系,之后才可以:
git pull
标签
#先切换到正确的分支
git tag tagname [commitid] [-m message]
#不加 id 默认标签打到最新的 commit 上,-m 跟 commit 一样
git tag
#查看标签
git show tagname
# 查看标签具体信息
git tag -d tagname
# 删除标签
git push origin v1.0
git push origin --tags
# 默认标签都是在本地,上面命令用于向远程仓库推送标签
git tag -d tagname
git push origin :refs/tags/tagname
# 删除远程标签
参考
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。