git常用命令备忘

Refer:廖雪峰的Git教程

git init    # 初始化
git add  # 添加文件
git commit -m "first version"  # 提交

git status  # 查看当前状态
git diff file.name  # 查看文件修改情况
git log --pretty=oneline  # 查看日志

git reset --hard HEAD^  # 强制回退到上一版本
git reset --hard 543264  # 回退到某一版本
git reflog   # git命令记录

git常用命令备忘_第1张图片
工作区与暂存区

需要注意的是:
第一次修改 -> git add -> 第二次修改 -> git add -> git commit

git checkout -- file.name    # 放弃工作区修改

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

  • readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
  • readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commit或git add时的状态。

用命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区。

rm file.name    # 删除文件
git rm file.name    # 在git中删除文件
checkout -- file.name  # 恢复文件

git remote add https://github.com/jlshix/flaskweb.git  # 添加远程库
git push -u origin master  # 第一次推送至远程库
git push origin master    # 推送至远程库
git clone https://github.com/jlshix/flaskweb.git    # 克隆远程库
# Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快
git常用命令备忘_第2张图片
head & master
git常用命令备忘_第3张图片
Dev
git checkout -b dev    # 新建并切换到dev分支  相当于以下两条
git branch dev
git checkout dev

git branch # 查看分支
git checkout master  # 切换回master分支
git merge dev  #   将dev分支合并
git branch -d dev  # 删除dev分支

git常用命令备忘_第4张图片
merge conflict

合并分支时若出现冲突需要手动合并,然后
git add git commit 解决冲突

使用git log --graph --pretty=oneline --abbrev-commit查看分支图

分支管理,禁用fastforward

$ git checkout -b dev
Switched to a new branch 'dev'

$ git add readme.txt 
$ git commit -m "add merge"
[dev 6224937] add merge
 1 file changed, 1 insertion(+)

$ git checkout master
Switched to branch 'master'

$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
 readme.txt |    1 +
 1 file changed, 1 insertion(+)

$ git log --graph --pretty=oneline --abbrev-commit
*   7825a50 merge with no-ff
|\
| * 6224937 add merge
|/
*   59bc1cb conflict fixed
git常用命令备忘_第5张图片
no fastforward

在实际开发中,我们应该按照几个基本原则进行分支管理:

首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了.

所以,团队合作的分支看起来就像这样:

git常用命令备忘_第6张图片
group programming

使用git stash命令可以保存当前工作空间

$ git stash
Saved working directory and index state WIP on dev: 6224937 add merge
HEAD is now at 6224937 add merge


$ git stash list
stash@{0}: WIP on dev: 6224937 add merge
git stash pop
$ git stash apply stash@{0}

开发一个新feature,最好新建一个分支;

如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。

关于协作

  • 查看远程库信息,使用git remote -v
  • 本地新建的分支如果不推送到远程,对其他人就是不可见的
  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交
  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致
  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突

标签管理

打标签

  • 命令git tag 用于新建一个标签,默认为HEAD,也可以指定一个commit id
  • git tag -a -m "blablabla...可以指定标签信息
  • git tag -s -m "blablabla...可以用PGP签名标签
  • 命令git tag可以查看所有标签

操作标签

  • 命令git push origin 可以推送一个本地标签
  • 命令git push origin --tags可以推送全部未推送过的本地标签
  • 命令git tag -d 可以删除一个本地标签
  • 命令git push origin :refs/tags/可以删除一个远程标签

附赠:Git Cheat Sheet

git常用命令备忘_第7张图片
git-cheat-sheet

你可能感兴趣的:(git常用命令备忘)