仓库篇

创建仓库

1
2
git init
git init newrepo

配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
git config --list			#查看当前git的配置信息
git config -e #针对当前仓库
git config -e --global #针对系统上所有仓库
#告诉Git你是谁
git config --global user.name "name"
git config --global user.email youemail
#选择你喜欢的文本编辑器
git config --global core.editor vim
#添加一些快捷方式(别名)
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.up rebase
git config --global alias.cm commit

git免除账号密码

git config --global credential.helper store

文件篇

add的使用

1
2
3
git add *.c
git add .
git add filename

提交

1
2
git status #告诉你 git add 和 git commit 的进展。status 信息还包括了添加缓存和移除缓存的相关指令。

项目历史

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
git log #使用默认格式显示完整地项目历史。如果输出超过一屏,你
#可以用 空格键 来滚动,按 q 退出。
git log -n #用 限制提交的数量。比如 git log -n 3 只会显示 3 个提交。
git log --oneline #将每个提交压缩到一行。当你需要查看项目历史的上层情
#况时这会很有用。
git log --stat #除了 git log 信息之外,包含哪些文件被更改了,以及每个文
#件相对的增删行数。
git log -p #显示代表每个提交的一堆信息。显示每个提交全部的差异
#(diff),这也是项目历史中最详细的视图。
git log --author="" #搜索特定作者的提交。 可以是字符串或正则表达式。
git log --grep="" #搜索提交信息匹配特定 的提交。 可以是字符串或正则表达式。
git log .. #只显示发生在 和 之间的提交。两个参数可以是提交 ID、分支名、HEAD或是任何一种引用。

git log #只显示包含特定文件的提交。查找特定文件的历史这样做会很方便。

git log --graph --decorate --oneline
#还有一些有用的选项。--graph 标记会绘制一幅字符组成的图形,左边是提交,右边是提交
#信息。--decorate 标记会加上提交所在的分支名称和标签。--oneline 标记将提交信息显示在
#同一行,一目了然

分支篇

  • 分支创建

    git branch br_name

  • 分支切换

    git checkout br_name

  • 分支合并

    git merge br_name #将br_name合并到当前分支

  • 分支列表

1
2
git branch #本地分支 
git branch -a #所有分支
  • 分支删除

    git branch -d br_name

  • 查看分支所属
    git reflog --date=local | grep 分支名

  • 查找两个分支的共同祖先
    git merge-base v1.11.2_a v1.11.4

  • 自动同步分支
    git fetch --prune

  • git删除远程分支后本地同步

1
2
git remote update origin --prune //更新远程分支列表
git branch -D {branch_name} //删除本地未同步到远程的分支

分支规范

  1. git主分支(master)。它是自动建立,用于发布重大版本更新
  2. git开发主分支(develop)。日常开发在此分支上进行
  3. git临时性分支:用于应对一些特定目的的版本开发(验证OK后,应该删除此分支),主要有:
  • 功能(feature)分支:它是为了开发某种特定功能,从Develop分支上面分出来的。开发完成后,要再并入Develop。可以采用feature-的形式命名。
  • 预发布(release)分支:指发布正式版本之前(即合并到Master分支之前),我们可能需要有一
    个预发布的版本进行测试。预发布分支是从Develop分支上面分出来的,预发布结束以后,必须合
    并进Develop和Master分支。它的命名,可以采用release-的形式
  • 修补bug(hotfix)分支:软件正式发布以后,难免会出现bug。这时就需要创建一个分支,进行bug修补。修补bug分支是从Master分支上面分出来的。修补结束以后,再合并进Master和Develop分支。它的命名,可以采用hotfix-***的形式。

注意事项: 一个分支尽量开发一个功能模块,不要多个功能模块在一个分支上开发。 feature 分支
在申请合并之前,最好是先 pull 一下 develop 主分支下来,看一下有没有冲突,如果有就先解决
冲突后再申请合并。

tag篇

列出tag

git tag #打印当前仓库所有的tag

git tag -l ‘v1.5’ #搜索符合模式的tag

打tag

git tag [项目名]

git tag -a [项目名]-m ‘tag of [name]’

切换到tag

git checkout name

删除tag

git tag -d name

将tag推送到服务器

git push origin v0.1.2 # 将v0.1.2 Tag提交到git服务器

git push origin –-tags # 将本地所有Tag一次性提交到git服务器

版本控制

reset版本回滚

git reset herd_id

reflag查看命令操作的历史

  1. 查看历史
    1. 使用reset回退到指定hard id的版本

提交

git提交

git push origin HEAD:refs/for/your_version

cherry-pick

git cherry-pick commit_id //将此commit id的提交合并到当前分支

git push 错了怎么回退

1、git log 查看版本号。commit后面那一串字符就是版本号,第一条记录就是你最后提交的一次的版本 号。我们需要回退到它前面那个版本。复制第二条记录的版本号。然后按英文 q退出。

2、git reset --hard 版本号(前面要求复制的)这会删除本地修改文件,也就是本地和远程版本内容一 致。

git reset --soft 版本号 只会将远程的版本回退。本地文件不动。(建议使用这条)如果只是回退上一个 版本,指令可以这样写。git reset --soft HEAD^。

git rebase

git rebase 命令修改第一笔提交,而不影响第二笔提交。

假设你的本地分支的提交历史记录如下:

1
2
c2f02d5 (HEAD -> master) second commit
614a3a7 first commit

其中,第一笔提交标记为 614a3a7 。

要修改第一笔提交,需要执行以下步骤:

  1. 运行 git rebase -i HEAD~2 命令,将最后两个提交(即 614a3a7 和 c2f02d5 )传递给 rebase 命令。此命令将打开与当前编辑器关联的交互式文件。

  2. 在文本编辑器中,找到要修改的提交,并在行首将 pick 更改为 edit 。保存并关闭文件。 3. 运行 git commit --amend 命令来修改提交。这将打开默认编辑器,其中包含您上次提交的消 息。

  3. 请修改提交消息。然后保存并关闭编辑器。

  4. 运行 git rebase --continue 命令以完成重新定义基础行操作。如果有冲突需要解决,请解决冲 突并使用 git add 命令添加更改后执行 git rebase --continue 。 完成这些步骤后,你会得到新的提交历史:

1
2
复制代码* f455b5d (HEAD -> master) first commit
* c2f02d5 second commit

现在,第一笔提交已被修改为 f455b5d ,而第二笔提交仍然保持不变为 c2f02d5 。

需要注意的是,这种方法只应在本地分支上使用。如果您的更改已经被推送到共享分支中,那么对历史 记录进行重新整理可能会引起合并冲突和其他问题。

git常用指令

重要指令 clone +fetch + pull +checkout + add +commit +push log+merge

常用指令速查

基本操作类:

	git init 	
		初始化仓库
	git log 
		查看日志
	git add 	<文件名>
		添加到暂存区
	git commit -m '注释'
		提交到仓库
	git merge <分支名>
		合并指定分支到当前活动分支

-分支切换类

	git checkout <分支名>
		切换到某个分支
	git checkout -b <分支名>
		创建并切换到某个分支(分支原来不存在)

-远程操作

	git clone <远程地址>[本地文件]
		clone 远程仓库到本次
	git pull
		拉取远程仓库的修改并合并
	git push --set-upstream origin 分支名
		推送本地修改到远端分支
		--set-upstream 表示和远端分支绑定关联关系,只有第一次推送时才需要此参数