git入门

初始化仓库
1
git init
查看修改用户名和用户邮箱
1
2
3
git --global user.name "your name"

git --global user.email "youe email"
提交文件到仓库
1
2
3
git add file1 file2 file3 

git commit -m <message>
工作区状态:
1
git status
查看修改内容:

(文本文件可以知道修改了什么,其他文件只能知道修改了,但是修改了什么不知道)

1
git diff files1
显示提交日志:
1
2
3
git log

git log --pretty=oneline
版本回退:
1
2
3
git reset --hard HEAD~100               数字为上N个版本

git reset --hard commit_id 直接去版本号所属版本
历史命令:
1
git reflog
撤销修改:
1
2
3
4
5
git checkout -- filename            撤销 工作区 修改

git reset HEAD -- filename 将提交到 暂存区 的修改会退到 工作区

git reset --hard HEAD~N 将 已提交的修改 回退 到 数字为上N个版本
删除文件
1
git rm filename

手动 rm filename 之后,git rm filename 和git add filename 效果一样。

最后提交 git commit -m

远程仓库 GitHub
1
2
3
4
5
git remote add origin git@server-name:path/repo-name.git

git push -u origin master

git push origin master
克隆远程仓库
1
2
3
git clone git@github.com:text/gitskills.git (快)

git clone https://github.com/text/gitskills.git
查看分支
1
git branch
创建并切换branch
1
2
3
git checkout -b dev    <==>  git branch dev      创建

git checkout dev 切换
分支(branch)合并
1
2
3
4
5
6
7
git merge dev

git merge --no-ff -m "XXXXXX" dev

git branch -d dev 删除分支

git log --graph --pretty=oneline --abbrev-commit 查看分支合并情况
分支策略

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

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

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

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

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

image-20200623144306682

保存现场,处理其他分支任务

git stash

git stash list

git stash pop <==> git stash apply 恢复 git stash drop 删除

开发新feature,新建分支,便于后期合并删除

强制删除未合并的分区:
1
git branch -D branchName
其他
  • 查看远程库信息,使用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可以查看所有标签。

  • 命令git push origin 可以推送一个本地标签;

  • 命令git push origin –tags可以推送全部未推送过的本地标签;

  • 命令git tag -d 可以删除一个本地标签;

  • 命令git push origin :refs/tags/可以删除一个远程标签。