$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
$ git init 在当前目录下初始化本地git仓库
$ git add readme.txt 把Working Directory(工作区)的内容 提交到 Index缓存区中
$ git commit -m "wrote a readme file" 把Index缓存区中的内容提交到 Repository版本库 -m 提交说明
$ git status 查看当前仓库的状态,

图片描述

$ git diff readme.txt 查看difference
$ git diff HEAD -- readme.txt 查看工作区和版本库里面最新版本的区别
$ git log 查看从近到远的提交日志 --pretty=oneline 首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
$ git reset --hard HEAD^
$ git reset --hard 3628164
$ git reflog 用来记录你的每一次命令
图片描述

$ git checkout -- readme.txt git checkout -- file可以丢弃工作区的修改
$ git reset HEAD readme.txt 命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
$ git rm test.txt 确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit
$ ssh-keygen -t rsa -C "youremail@example.com" 创建SSH key

$ git remote rm origin 删除已有的远程库
$ git remote add origin git@gitee.com:SumTeam/gitDemo.git 本地关联远程库
图片描述
$ git pull origin master --allow-unrelated-histories fetch+meger
$ git push -u origin master 把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
$ git clone git@github.com:michaelliao/gitskills.git 克隆一个本地库
$ git checkout -b dev = $ git branch dev + $ git checkout dev -b参数表示创建并切换
$ git branch 查看当前分支 列出所有分支,当前分支前面会标一个*号。
$ git merge dev 合并指定分支到当前分支
$ git branch -d dev 删除dev分支

$ git log --graph --pretty=oneline --abbrev-commit 用git log --graph命令可以看到分支合并图。
*59bc1cb conflict fixed
|\
|*75a857c AND simple
*|400b400 & simple
|/
*fec145a branch test

$ git merge --no-ff -m "merge with no-ff" dev
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
$ git stash 可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
$ git stash list
工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了

$ git branch -d feature-vulcan 删除分支
$ git branch -D feature-vulcan 强行删除分支

$ git remote -v 查看远程库的信息
$ git push origin master 推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上

$ git pull = fetch + merge
$ git branch --set-upstream branch-name origin/branch-name 原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接

$ git tag v1.0 打一个新标签
$ git tag 查看所有标签
找到历史提交的commit id,然后打上 标签
$ git log --pretty=oneline --abbrev-commit
$ git tag v0.9 6224937

$ git show v0.9 查看v0.9标签详情

还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:
$ git tag -a v0.1 -m "version 0.1 released" 3628164

还可以通过-s用私钥签名一个标签:
$ git tag -s v0.2 -m "signed version 0.2 released" fec145a

签名采用PGP签名,因此,必须首先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错:
gpg: signing failed: secret key not available
error: gpg failed to sign the data
error: unable to sign the tag

如果报错,请参考GnuPG帮助文档配置Key。

$ git tag -d v0.1 删除标签
$ git push origin v1.0 推送某个标签到远程
$ git push origin --tags 一次性推送全部尚未推送到远程的本地标签

如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
$ git tag -d v0.9
Deleted tag 'v0.9' (was 6224937)

然后,从远程删除。删除命令也是push,但是格式如下:
$ git push origin :refs/tags/v0.9
To git@github.com:michaelliao/learngit.git

  • [deleted] v0.9

一个GIT库 关联2个远程库
仍然以learngit本地库为例,我们先删除已关联的名为origin的远程库:
git remote rm origin

然后,先关联GitHub的远程库:
git remote add github git@github.com:michaelliao/learngit.git

注意,远程库的名称叫github,不叫origin了。
接着,再关联码云的远程库:
git remote add gitee git@gitee.com:liaoxuefeng/learngit.git

同样注意,远程库的名称叫gitee,不叫origin。
现在,我们用git remote -v查看远程库信息,可以看到两个远程库:
git remote -v
gitee git@gitee.com:liaoxuefeng/learngit.git (fetch)
gitee git@gitee.com:liaoxuefeng/learngit.git (push)
github git@github.com:michaelliao/learngit.git (fetch)
github git@github.com:michaelliao/learngit.git (push)

如果要推送到GitHub,使用命令:
git push github master

如果要推送到码云,使用命令:
git push gitee master

这样一来,我们的本地库就可以同时与多个远程库互相同步:
┌─────────┐ ┌─────────┐
│ GitHub │ │ Gitee │
└─────────┘ └─────────┘

 ▲           ▲
 └─────┬─────┘
       │
┌─────────────┐
│ Local Repo  │
└─────────────┘

$ git config --global color.ui true 让Git显示颜色,会让命令输出看起来更醒目

忽略特殊文件
在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/git...
忽略文件的原则是:
1.忽略操作系统自动生成的文件,比如缩略图等;
2.忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
3.忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件
最后一步就是把.gitignore也提交到Git,就完成了!当然检验.gitignore的标准是git status命令是不是说working directory clean。

有些时候,你想添加一个文件到Git,但发现添加不了,原因是这个文件被.gitignore忽略了:
$ git add App.class
The following paths are ignored by one of your .gitignore files:
App.class
Use -f if you really want to add them.

如果你确实想添加该文件,可以用-f强制添加到Git:
$ git add -f App.class

或者你发现,可能是.gitignore写得有问题,需要找出来到底哪个规则写错了,可以用git check-ignore命令检查:
$ git check-ignore -v App.class
.gitignore:3:*.class App.class

Git会告诉我们,.gitignore的第3行规则忽略了该文件,于是我们就可以知道应该修订哪个规则。

$ git config --global alias.st status 配置别名

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

配置Git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。
配置文件放哪了?每个仓库的Git配置文件都放在.git/config文件中


sumnear
0 声望0 粉丝

一只野生coder 路子很野。