本地仓库操作

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 设置

  1. ssh-keygen -t rsa -C "youremail@example.com"
    #生成秘钥对儿,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对。
    #id_rsa是私钥,不能泄露出去。
    #id_rsa.pub是公钥,可以放心地告诉任何人。
  2. 在 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
# 删除远程标签

参考