Git常用命令笔记
Git是什么?
Git是目前世界上最先进的分布式版本控制系统(没有之一)。
Git有什么特点?简单来说就是:高端大气上档次!
那什么是版本控制系统? 好了,别闹~
安装配置
-
安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name "Your Name" $ git config --global user.email "email@example.com"
-
查看用户名和邮箱地址:
$ git config user.name $ git config user.email
-
修改当前的project
- git 修改当前的project的用户名的命令为:
git config user.name 你的目标用户名;
- git 修改当前的project提交邮箱的命令为:
git config user.email 你的目标邮箱名;
创建版本库
-
git init
命令把这个目录变成Git可以管理的仓库:$ git init Initialized empty Git repository in /Users/michael/learngit/.git/
-
git status
仓库当前的状态 -
git diff
顾名思义就是查看difference -
git add
加文件git add -A
提交所有变化git add -u
提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)git add .
提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
-
git commit
告诉Git,把文件提交到仓库$ git commit -m "hello world"
-
git log
命令显示从最近到最远的提交日志`- 加上
--pretty=oneline
参数 - git log –pretty=oneline
$ git log --pretty=oneline 3628164fb26d48395383f8f31179f24e0882e1e0 append GPL ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file
- 加上
-
git reset --hard commit_id
回退到版本
在Git中,用HEAD
表示当前版本,也就是最新的提交3628164...882e1e0
(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
。$ git reset --hard HEAD^ HEAD is now at ea34578 add distributed
-
git reflog
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。 -
git checkout -- file
可以丢弃工作区的修改- 就是让这个文件回到最近一次
git commit
或git add
时的状态 git checkout -- file
命令中的--
很重要,没有--
,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。
- 就是让这个文件回到最近一次
-
git reset HEAD file
可以把暂存区的修改撤销掉(unstage),重新放回工作区 -
git rm
删掉,并且git commit
从版本库中删除该文件 -
删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
$ git checkout -- test.txt
git checkout
其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
远程仓库
-
创建SSH Key。
$ ssh-keygen -t rsa -C "youremail@example.com" ssh-keygen -t rsa -C "defound@outlook.com"
-
关联一个远程库,使用命令
$ git remote add origin git@github.com:michaelliao/learngit.git
-
第一次推送master分支的所有内容,把本地库的所有内容推送到远程库上:
git push -u origin master
-
每次本地提交后,只要有必要,就可以使用命令
git push origin master
推送最新修改;git push origin master
-
git clone
克隆一个本地库$ git clone git@github.com:michaelliao/gitskills.git Cloning into 'gitskills'... remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0) Receiving objects: 100% (3/3), done. $ cd gitskills $ ls README.md
-
查看当前的远程库
要查看当前配置有哪些远程仓库,可以用命令:git remote
-
提取远程仓库 Git 有两个命令用来提取远程仓库的更新。
-
从远程仓库下载新分支与数据:
git fetch
该命令执行完后需要执行git merge 远程分支到你所在的分支。
-
从远端仓库提取数据并尝试合并到当前分支:
git pull
该命令就是在执行 git fetch 之后紧接着执行 git merge 远程分支到你所在的任意分支。
假设你配置好了一个远程仓库,并且你想要提取更新的数据,你可以首先执行 git fetch [alias] 告诉 Git 去获取它有你没有的数据,然后你可以执行 git merge [alias]/[branch] 以将服务器上的任何更新(假设有人这时候推送到服务器了)合并到你的当前分支。 -
-
删除远程仓库
git remote rm [别名]
-
实例
$ git remote -v origin git@github.com:tianqixin/runoob-git-test.git (fetch) origin git@github.com:tianqixin/runoob-git-test.git (push) # 添加仓库 origin2 $ git remote add origin2 git@github.com:tianqixin/runoob-git-test.git $ git remote -v origin git@github.com:tianqixin/runoob-git-test.git (fetch) origin git@github.com:tianqixin/runoob-git-test.git (push) origin2 git@github.com:tianqixin/runoob-git-test.git (fetch) origin2 git@github.com:tianqixin/runoob-git-test.git (push) # 删除仓库 origin2 $ git remote rm origin2 $ git remote -v origin git@github.com:tianqixin/runoob-git-test.git (fetch) origin git@github.com:tianqixin/runoob-git-test.git (push)
分支管理
创建与合并分支
Git鼓励大量使用分支:
- 查看分支:
git branch
- 创建分支:
git branch <name>
- 切换分支:
git checkout <name>
- 创建+切换分支:
git checkout -b <name>
- 合并某分支到当前分支:
git merge <name>
- 删除分支:
git branch -d <name>
解决冲突
git log --graph
命令可以看到分支合并图。