廖雪峰git笔记

查看本地机子的在Git上的名字和邮箱:
git config user.name
git config user.email

对所有仓库指定相同的用户名和Email地址:
git config --global user.name "Your Name"
git config --global user.email "[email protected]"

创建版本库:
git init

添加文件到git仓库:
1.git add <file>
2.git commit -m <message>

时刻掌握仓库当前的状态,看看有没有准备提交的修改:
git status

上次怎么修改了文件:
git diff

很详细的历史记录:
git log
退出:":q"
git log --pretty=online 简化信息:版本号+当初提交的信息

HEAD表示当前版本,也就是最新的提交,上一个版本就是HEAD^,
上上一个版本就是HEAD^^,往上100个版本就是HEAD~100。

回退到上一个版本:
git reset --hard HEAD^

变成指定版本(回退或进化):
git reset --hard <指定的任一commit id>
(版本号没必要写全,前几位就可以了,Git会自动去找。
当然也不能只写前一两位,因为Git可能会找到多个版本号,
就无法确定是哪一个了。)

记录每一次命令:
git reflog
(要重返未来,用git reflog查看命令历史,
以便确定要回到未来的哪个版本)

查看工作区和版本库里面最新版本的区别:
git diff HEAD -- <file>

丢弃工作区的修改(误删工作区文件可以用此命令恢复):
git checkout -- <file>
(命令git checkout -- readme.txt意思就是,
把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,
现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,
现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit
或git add时的状态。)

把暂存区的修改撤销掉(unstage),重新放回工作区:
git reset HEAD <file>

切换到另一分支:
git checkout <another>

从版本库删掉文件:
git rm

查看git版本:
Git --version

创建github仓库和本地同步:
git remote add origin [email protected]:yourname/yourrepository.git
git push -u origin master
(由于远程库是空的,我们第一次推送master分支时,加上了-u参数,
Git不但会把本地的master分支内容推送的远程新的master分支,
还会把本地的master分支和远程的master分支关联起来,
在以后的推送或者拉取时就可以简化命令: git push origin master)

把本地库的内容推送到远程(实际上是把当前分支master推送到远程):
git push origin master

克隆远程库到本地:
git clone [email protected]:yourname/yourrepository.git

创建分支并切换到该分支(-b):
git checkout -b <branch>

创建并切换分支:
git branch <branch>
git checkout <branch>

查看当前分支:
git branch

合并分支:
git merge <branch>

删除分支:
git branch -d <branch>

查看该文件在不同分支的情况:
cat <file>

合并分支产生冲突:
1.查看是哪些文件有冲突:git status
2.查看冲突文件并修改:cat <file>
3.在master分支上做提交

查看分支合并提交历史:
git log --graph --pretty=oneline --abbrev-commit
(用git log --graph命令可以看到分支合并图)

禁用fast forward模式:
git merge --no-ff -m <message> <branch>
(合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。)

把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
(适用于突然临时要改bug,就把手头上的工作先储存起来)
git stash

恢复stash内容:
1)git stash apply (stash并不删除,需要用git stash drop 删除)
2)git stash pop (恢复的同时将stash内容删除了)
3)git stash list
git stash apply stash@{<num>} (恢复指定的stash)

要丢弃一个没有被合并过的分支(强制):
git branch -D <branch>

查看远程库信息:
git remote [-v]

推送分支:
git push <remote library name, default 'origin'> <branch>
(如果推送失败,则远程分支比你的本地更新,需要先用git pull试图合并)

在本地创建和远程分支对应的分支:
(git clone 只能克隆master分支,如需远程库别的分支下来,则用该指令)
git checkout -b <local branch name> origin/<remote branch name>
eg: git checkout -b dev origin/dev

抓取远程库最新提交:
git pull
(如失败,则是没有指定本地分支与远程库分支的链接,则:
git branch --set-upstream-to=origin/dev dev
建立本地分支和远程分支的关联,然后在pull,
还有冲突那就手动解决)

将提交历史整理成一条直线:
git rebase
(rebase的目的是使得我们在查看历史提交的变化时更容易,
因为分叉的提交需要三方对比)

(tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起,
是版本库的快照,但分支能移动,tag不能移动)

创建标签:
(切换到需要打标签的分支上)
git tag <tag name, eg: v1.0>

查看所有标签:
(标签不是按时间顺序列出,而是按字母排序的)
git tag

直接在commit id 打标签:
git tag <tag name> <commit id>
eg: git tag v0.9 f52c633

创建带有说明的标签,用-a指定标签名,-m指定说明文字:
git tag -a <tag name> -m <message> <commit id>
eg: git tag -a v0.1 -m "version 0.1 released" 1094adb

查看标签信息:
git show <tag name>
(标签总是和某个commit挂钩。如果这个commit既出现在master分支,
又出现在dev分支,那么在这两个分支上都可以看到这个标签。)

删除标签:
git tag -d <tag name>

推送某个标签到远程:
(创建的标签都只存储在本地,不会自动推送到远程)
git push origin <tagname>

一次性推送全部尚未推送到远程的本地标签:
git push origin --tags

删除远程标签:
git push origin :refs/tags/<tag name>

(在Git工作区的根目录下创建一个特殊的.gitignore文件,
然后把要忽略的文件名填进去,然后提交给git,
Git就会自动忽略这些文件的提交,.gitignore文件本身要放到版本库里,
并且可以对.gitignore做版本管理。)
强制添加文件到Git(忽略.gitignore):
git add -f <file>

检查.gitignore的哪个规则错了:
git check-ignore -v <file>
(检查是.gitignore的哪个规则让该文件提交不上去,即Git
忽视了该文件)

配置别名:
eg: git config --global alias.st status (用git st 代替git status)
(--global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用)

显示最后一次提交信息:
git log -1 (这是数字1)

删除别名:
1)找到这个仓库.git里面的config,删除对应的行:
cd .git
vi config
2)找到用户主目录下的一个隐藏文件.gitconfig,删除
对应的行
cd <HOME>
vi .gitconfig

猜你喜欢

转载自www.cnblogs.com/jim7086/p/9275358.html
今日推荐