文章命令摘抄于《GitHub入门与实践》一书、网上搜集和实践整理。

生成ssh key

$ ssh-keygen -t rsa -C "your_email@example.com"

查看ssh目录的文件

$ ls -al ~/.ssh

设置git昵称和邮箱

$ git config --global user.name "昵称"
$ git config --global user.email "邮箱"

命令

基本操作

初始化仓库

git init

查看仓库的状态

git status

向暂存区中添加文件

git add
暂存区是提交之前的一个临时区域

保存仓库的历史记录

git commit
记述一行提交信息
git commit -m "here enter description"
记述详细提交信息
git commit

执行后编辑器会启动
提交格式:

  • 第一行:一行文字简述提交的更改内容
  • 第二行:留空
  • 第三行:记述更改的原因和详细的内容
编辑器启动后按 i 进入编辑状态,写完按 Esc 输入:wq(w写入q退出)

git commit description

中止提交

编辑状态下想终止提交

  • 还没有输入过内容

    • 输入:q退出
  • 已经有内容了,但不想保存

    • 输入:q!退出

查看提交日志

git log
显示简短的提交日志
git log --pretty=short
显示一行的提交日志
git log --pretty=oneline
只显示指定目录、文件的日志
git log README.md
显示文件的改动

对比文件的上一个提交,清晰显示改动的地方

git log -p readme.md
查看工作树和暂存区的区别
git diff
查看工作树和最新提交的差别

在执行git commit命令之前先执行git diff HEAD,可以查看本次提交和上次提交之间的差别

git diff HEAD

分支的操作

显示分支列表

分支前面有*号这表示我们当前所在的分支

git branch

创建分支

创建branch-name的分支,并切换到该分支下

git checkout -b branch-name

另外一种创建写法

git branch branch-b # 创建branch-b分支
git checkout branch-b # 切换到branch-b分支

切换分支

git checkout branch-b

重命名分支

git branch -m old_name new_name
切换回上一个分支
git checkout -

合并分支

默认是:--fffase forward 快速合并,不会生成新的提交
不使用快速合并
  • step 1 先切换回要合并到的主分支
$ git checkout master
  • step 2 然后合并 branch-b 分支
$ git merge --no-ff branch-b

--no-ff 的效果就像下面这样,并会生成一个新的提交。
--no-ff
图解4种git合并分支方法

压缩合并

将待合并的分支内容压缩成一个新的提交

$ git merge --squash branch-b

删除分支

删除分支,删除前主分支的提交中有合并分支的提交,会丢失分支信息,内容不会丢失。

$ git merge -D branch-b

以图表方式查看分支提交日志

$ git log --graph

回溯(时光机、后悔药)

$ git reset --hard d6f34b7c6d72fdc4e3d01fe6fb2a430278b913ff
$ git reset --hard d6f34b # 或者更简短一些,唯一即可

回退到上一个版本

$ git reset --hard HEAD^

撤销上一个提交(commit)

这个操作会撤销到上一个的本地提交,但是会保留其提交的修改内容,作用就是以便修正内容之后重新提交。

$ git reset HEAD~

查看仓库操作日志

在仓库执行过的操作日志都会被记录下来,包括乘坐时光机的操作

$ git reflog

放弃修改

放弃本地修改

未使用git add命令的文件或目录,可以通过下面的命令来进行

$ git checkout -- filename // filename换成文件名或者文件,放弃单个
$ git checkout . // 放弃本地所有的修改

已使用git add,但未使用git commit命令的文件或目录
下面命令会回到add之前,文件会保留并不会删除

$ git reset HEAD filename // 放弃添加单个文件
$ git reset HEAD . // 放弃所有

还有一种情况,发现上面的操作都无法完全清除本地的改动,可以使用下面的命令。
原因是,这些清不掉的文件都是新添加的文件,上面的操作只对改动原文件有效。

git clean -df # 删除新添加的文件

已使用git add&git commit的文件,撤销此次commit

git reset --hard commit_id // 直接还原到指定的commit记录,所以commit会被删除

放弃添加

撤销add操作

仍会保留改动的内容

$ git reset

版本tag

$ git tag -a v0.1 -m "version 0.1 released" 1094adb

查看tag版本

$ git show v1.0

同步tag到远程仓库

$ git push origin --tags

删除tag版本

$ git tag -d v1.0

拉取远程分支到本地

$ git fetch origin branchname:branchname # 拉取branchname到本地branchname分支

强制忽略文件

如果已存在版本库里面的文件,是无法加入到.gitignore忽略列表里面的。
可以使用,下面的命令进行强制忽略

git update-index --assume-unchanged <files>

解除忽略命令

git update-index --no-assume-unchanged <files>

jayce
41 声望3 粉丝

十年饮冰,难凉热血。