Git常用命令
请确保已经安装里git客户端
- Workspace:工作区
- Index / Stage:暂存区
- Repository:仓库区(或本地仓库)
- Remote:远程仓库
一、一般配置
1.查看信息
git --version //查看git的版本信息 git config --global user.name //获取当前登录的用户 git config --global user.email //获取当前登录用户的邮箱
2.登录git
/* 如果刚没有获取到用户配置,则只能拉取代码,不能修改 要是使用git,你要告诉git是谁在使用*/ git config --global user.name 'userName' //设置git账户,userName为你的git账号, git config --global user.email 'email'
3.创建一个文件夹
mkdir nodejs //创建文件夹nodejs cd nodejs //切换到nodejs目录下
4.初始化git仓库
git init //在nodejs文件夹下初始化一个仓库,此时文件里会到一个.git的隐藏文件夹
5.创建忽略文件
touch .gitignore //不需要服务器端提交的内容可以写到忽略文件里 /* .git .idea */
6.查看目录
ls -al
7.创建文件并写入内容
注:如果文件不存在则会创建文件
echo "hello git" > index.html //将'hello git' 写入到index.html中 //单个>箭头表示写入, >>表示追加
8.查看文件内容
cat index.html
二、基本操作
1.增加到暂存区中
git add index.html git add -A //全部添加到缓存区
2.增加到版本库中
git commit -m '备注信息'
3.查看版本
git log --oneline
4.比较差异
//比较的是暂存区和工作区的差异 git diff //比较的是暂存区和历史区的差异 git diff --cached //比较的是历史区和工作区的差异(修改) git diff master
5.撤回内容
//1.在git add之前,可以手动撤销 或者用暂存区中的内容或者版本库中的内容覆盖掉工作区 //用暂存区中的内容或者版本库中的内容覆盖掉工作区 git checkout index.html //2.在commit之前,可以把暂存区的修改撤销掉 //取消增加到暂存区的内容(添加时) git reset HEAD index.html //3.提交到版本库,可以用版本回退
6.删除本地文件
rm fileName
7.删除暂存区
//保证当前工作区中没有index.html git rm index.html --cached
8.回滚版本
//回滚指定的一个版本 git log git reset --hard commit_id //回滚到上一个版本 git reset --hard HEAD^
9.回滚到未来
git reflog
git reset --hard commit_id
三、分支操作
1.创建分支
git branch dev
2.切换分支
git checkout dev
3.创建分支并切换分支
git checkout -b dev
4.删除分支
git branch -d dev
5.在分支上提交新的版本
git commit -a -m 'dev1'
6.合并分支
git merge dev
7.分支的合并后显示log
git log --oneline --graph --decorate
8.在分支开发的过程中遇到其他问题需要切换其他分支
保留写好的内容在切换到主干
git stash
9.在次切换分之后需要应用一下保留的内容
git stash apply
10.丢掉保存的内容
git stash drop
11.使用并丢掉
git stash pop
12.合并分支把树杈掰到主干上
git rebase
四、添加远程的仓库
1.推送到远程仓库
-u参数 upstream
git push origin master -u //获取最新代码
2.连接远程仓库
git remote add origin 仓库的地址
3.查看远程仓库
git remote -v
4.删除远程仓库
git remote rm origin
git常用命令
安装及配置:
Ubuntu下安装:sudo apt-get install git
配置用户名:git config --global user.name "你的名字"
配置e-mail:git config --global user.email "你的邮箱@xx.com"
与添加有关的:
将当前目录变为仓库:git init
将文件添加到暂存区:git add 文件名 [可选:另一个文件名]
将暂存区提交到仓库:git commit –m "描述"
与查询有关的:
查询仓库状态:git status
比较文件差异(请在git add之前使用):git diff 文件名
查看仓库历史记录(详细):git log
查看仓库历史记录(单行):git log --pretty=online
或 git log --online
查看所有版本的commit ID:git reflog
与撤销有关的:
撤销工作区的修改:git checkout -- 文件名
撤销暂存区的修改:git reset HEAD 文件名
回退到历史版本:git reset --hard 该版本ID
回退到上个版本:git reset --hard HEAD^
上上版本是HEAD^^
,也可用HEAD~2
表示,以此类推
与标签有关的:
为当前版本打标签:git tag 标签名
为历史版本打标签:git tag 标签名 该版本ID
指定标签说明:git tag –a 标签名 –m "标签说明" [可选:版本ID]
查看所有标签:git tag
查看某一标签:git show 标签名
删除某一标签:git tag –d 标签名
与GitHub有关的:
先有本地库,后有远程库,将本地库push到远程库
关联本地仓库和GitHub库:git remote add origin 网站上的仓库地址
第一次将本地仓库推送到GitHub上:git push –u origin master
先有远程库,后有本地库,从远程库clone到本地库
从远程库克隆到本地:git clone 网站上的仓库地址
1.git init命令:用于初始化一个已经存在git仓库或者创建一个空的本地仓库。
ssh连接方式在提交和拉取代码的时候不需要输入密码。
http需要每次输入密码。
2.git clone命令:克隆远程仓库到本地仓库
git clone [url] 将地址上的代码克隆到当前文件夹
git clone [url] [文件名] 新建文件夹,并将地址上的代码克隆到此文件夹
3.git remote命令:管理相关的远程仓库。
git remote add +ssh 连接远程仓库
git remote --v 查看详细remote
4.git status:显示工作区的状态
5.git log:记录提交日志(注意只记录提交日志,存在于远程仓库与本地仓库),
6.git reflog:记录所有分支的所有操作(所有操作,包括分支切换等,只存在使用者的本地仓库)
7.git config:修改/查看git配置信息
/etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。
git config --global user.name 'aiguo.sun' 修改该用户的用户名
git config user.name 查看用户名
8.git diff:显示不同的提交,不同工作区域,不同分支之间的差别。
git diff:工作区与暂存区的不同(显示还没有暂存起来的改动,而不是这次工作和上次提交之间的差异)。
git diff --cached 与git diff --staged 显示暂存区与本地仓库之间的不同。
git diff + 两个日志编号 显示两次提交的不同
git diff + 两个分支 显示两个分支 的不同
9.git add:工作区提交到暂存区(跟踪文件)
git add 文件名,将该文件提交到暂存区
git add *.c 把.c文件提交到暂存区
10.git commit:暂存区提交到本地仓库
git commit -m ‘注释’ 将暂存区的内容提交到本地仓库
Git 提供了一个跳过使用暂存区域的方式,只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤
git commit -am ‘注释’跟踪过的文件提交到本地仓库
git commit –amend 修改上次提交(如果需要新加文件,将文件add到暂存区,如果修改文件,先修改,在使用)
11.git push:将本地仓库内容推送到远程仓库
git push [远程主机名] [本地分支名]:[远程分支名]:即是将本地的分支推送到远程主机上分支
git push origin master:如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建
git push origin :refs/for/master :如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,等同于 git push origin --delete master
git push origin:如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支
git push:如果当前分支只有一个远程分支,那么主机名都可以省略,形如 git push,可以使用git branch -r ,查看远程的分支名
12.git merge:合并分支
git merge [分支1]:将分支1的内容合并到当前分支
合并分支一半需要手动解决冲突,在解决了所有文件里的所有冲突后,运行 git add 将把它们标记为已解决状态(译注:实际上就是来一次快照保存到暂存区域。)
git merge -- abort :取消本次合并
13.git fetch:拉取远程仓库到本地仓库
此操作不会影响当前的分支,创建在origin上,例如origin/master
git fetch:更新所有分支
git fetch origin master:取回origin主机的master分支
14.git pull:拉取远程仓库到本地仓库并合并到本地分支(git fetch + git merge)
15.git branch:管理分支
git branch:查看本地分支
git branch -a:查看所有分支
git branch [分支名]:新建分支
git branch -d [分支名]:删除分支
git branch --v:查看分支具体信息
git branch --merged:查看哪些分支已被并入当前分支
git branch --no-merged:查看尚未合并的工作
16.git checkout:检出分支或撤销文件
git checkout [分支名]:切换分支
git checkout -b [分支名]:新建分支并转换到新分支
git checkout – [文件名]:本地仓库的某个文件将工作区内容还原。
git checkout + 提交日志 + 文件名:将工作区内容还原到某次提交的某个文件的内容,提交日志可以是某一次的具体hash值,也可以是Head~数字 表示当前提交的前多少次
17.git reset:重制HEAD到指定状态
git reset 或者 git reset -- mixed HEAD~ 将本地仓库的上一次提交保存到暂存区,不会修改工作区内容
git reset -- hard HEAD~ 将本地仓库的上一次提交保存到暂存区和工作区(工作区内容丢失,尽量少用,不可逆)
git reset -- soft HEAD~ 将head指针指向上一次提交,不会修改暂存区和工作区
18.git revert:撤销一些已经存在的提交
git revert + 版本号 :撤销到上一次操作
与git reset -- hard区别:git revert是一次新的提交,有版本号,而git reset -- hard将以后提交的版本号全删除。
19.git cherry-pick:把某次提交的内容合并到当前分支
git cherry-pick + 版本号 :将这一次的修改提交到当前分支。
如果使用git merge会将所有的修改全部提交。
20.git rebase:用于把一个分支的修改合并到当前分支 (把在一个分支里提交的改变移到另一个分支里重放一遍)
注:一般我们使用变基的目的,是想要得到一个能在远程分支上干净应用的补丁 — 比如某些项目你不是维护者,但想帮点忙的话,最好用变基:先在自己的一个分支里进行开发,当准备向主项目提交补丁的时候,根据最新的 origin/master 进行一次变基操作然后再提交,这样维护者就不需要做任何整合工作(译注:实际上是把解决分支补丁同最新主干代码之间冲突的责任,化转为由提交补丁的人来解决。),只需根据你提供的仓库地址作一次快进合并,或者直接采纳你提交的补丁。
合并结果中最后一次提交所指向的快照,无论是通过变基,还是三方合并,都会得到相同的快照内容,只不过提交历史不同罢了。变基是按照每行的修改次序重演一遍修改,而合并是把最终结果合在一起。