GIT 操作命令总结

简介:GIT仓库 包含两个部分:1.工作区,2.版本库(a暂存区,b当前分支)。

工作区也就是respository目录,目录中还有一个隐藏目录.git,这个不算工作区,而是Git的版本库。版本库又包含了两个部分:1 暂存区 2 当前分支

  1. git add命令实际上就是把要提交的所有修改放到暂存区(Stage),
  2. 执行git commit就可以一次性把暂存区的所有修改提交到分支。
  3. 每次修改,如果不用git add到暂存区,那就不会加入到commit中
  4. 要操作本地git仓库,先要安装git,然后在指定目录创建git仓库,执行相关操作(git目录右键,GIT BASH Here)
//初始化一个Git仓库
$ mkdir git
$ cd git
$ pwd 
$ git init

说明:
pwd命令:显示当先目录位置
git init 命令将当前目录变成git可以管理的仓库,当前目录会多出一个.git的文件
//-------------------------------------------
	
//添加文件到Git仓库
$ git add file1.txt  
$ git add file2.txt file3.txt  
$ git commit -m "add 3 files." 

说明:
git add 命令后面可以跟多个文件
git commit 命令 -m后面输入的是本次提交的说名
//-------------------------------------------

//git仓库状态查看
$ git status
$ git diff readme.txt 
$ git log 
$ git log -pretty=oneline

说明:
git status命令查看当前仓库的状态,修改的内容有没有提交
git diff <file> 命令用于对比文件距离上一次提交发生的变化
git log命令显示从最近到最远的提交日志
git log --pretty=oneline 更整洁的展示
//-------------------------------------------

//Git撤销修改
$ git checkout -- file1.txt
$ git reset HEAD file1.txt
$ git reset --hard HEAD^
$ git reset --hard HEAD~10
$ cat file1.txt
$ git log
$ git reflog

说明:
git checkout -- <file>命令,如果修改仅仅在工作区,那么撤销file在工作区的所有修改,恢复成上一次提交前的状态
git reset HEAD <file>命令,如果修改已经add到了暂存区,那么撤销file在暂存区所有的修改恢复成工作区状态,暂存区没有任何内容,然后参照第一步撤销修改
git reset --hard HEAD^【或者指定版本id,仅仅写前几位就好】命令,如果已经commit到了本地git仓库,那么回退到上一版本状态,上一个版本就是HEAD^,上上一个版本就是HEAD^^,往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
cat file1.txt 查看文件内容
git log 查看历史修改版本,可以用来版本回退的时候,查看具体回退的版本id
git reflog 如果回退到历史版本后,后悔,又想回到之前未来的版本,那么reflog可以看到之前的版本号,进行回退操作
//-------------------------------------------

//git删除文件
$ git rm readme.txt
$ git status 
$ git commit -m "remove file"

说明:
git rm readme.txt命令用于删除指定文件,也可以在git仓库手动删除
git status命令查看修改记录
//-------------------------------------------

//创建git的SSH key
$ ssh-keygen -t rsa -C "zhangying@xiniaoyun.com"
$ Enter+Enter+Enter

说明:
ssh-keygen -t rsa -C "zhangying@xiniaoyun.com"命令 创建SSH Key,你需要把邮件地址换成你自己的邮件地址,然后一路回车
一路回车
根据给定路径,在用户主目录下,生成id_rsa和id_rsa.pub两个文件,打开id_rsa.pub,可找到sshkey

为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。
//-------------------------------------------

//Git仓库创建,先建本地,后同步远程
$ git remote add origin git@github.com:zhang_ying/learngit.git
$ git push -u origin master
$ git push origin master

说明:
git remote add origin git@github.com:zhang_ying/learngit.git 要关联一个远程库,在你本地仓库下运行命令。zhang_ying为你的GitHub账户名,learngit为你本地仓库名,
git push -u origin master 把本地库的所有内容第一次推送到远程库上
git push origin master //此后,只要本地作了提交,就可以通过命令进行推送最新修改:

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样:

//Git仓库创建,先建远程,后同步本地
$ git clone git@github.com:zhang_ying/gitskills.git
$ git clone https://github.com/zhang_ying/gitskills.git 
$ cd gitskills
$ ls

git clone giturl 克隆远程仓库到本地指定目录,git@github.com:zhang_ying/gitskills.git===https://github.com/zhang_ying/gitskills.git 
cd gitskills进入本地目录gitskills查看
//-------------------------------------------

//创建并切换分支
$ git checkout -b dev
$ git branch dev
$ git checkout dev
$ git branch
//当dev分支做修改,修改完提交dev,切换回master,合并dev
$ git checkout master
$ git merge dev
$ git log --graphy
$ git log --graph --pretty=oneline --abbrev-commit
$ git branch -d dev 
//分支合并,禁用Fast forward模式
$ git merge --no-ff -m "merge with no-ff" dev


说明:
git checkout -b dev命令,相当于两条命令,创建dev分支并切换到该分支上
git branch <name>创建指定分支
git checkout dev 命令,用于切换指定的分支上
git branch 命令,显示git仓库所有的分支
git merge dev 命令,将指定dev分支上的内容合并到当前分支上,dev分支可以删除了,分支之间进行merge时,可能会发生冲突,需要你手动解决冲突后,然后提交。Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改如下后保存:
git log --graph 命令,图形化展示分支合并的情况
git log --graph --pretty=oneline --abbrev-commit 命令,整洁图形化展示合并分支情况
git branch -d <name>命令,删除指定分支,注意,如果要删除当前所在的分支,首先要切换到其他分支上,不然删除不了
git branch -D <name>命令,加入拉了一个分支,发现后面不需要了,分支的修改也没有合并,那么要丢弃会提示你未合并,可以通过这种方式强行丢弃一个没有被合并过的分支

默认情况下,GIT会采用Fast forward模式,在这种模式下,如果删除了分支,那么会丢失分支的痕迹
可以强制禁用Fast forward模式,Git就会在merage时生成一个新的commit,这样,即便删除了分支,在分支历史上也可以看到分支信息
//-------------------------------------------

//创建bug分支
$ git stash
$ git checkout master
$ git checkout -b bug
//bug 修改完成,提交分支,切换master,合并bug,删除bug分支,恢复原有开发存储的内容
$ git add *
$ git commit -m "bug is solved"
$ git checkout master
$ git merge bug
$ git branch -d bug
$ git stash pop 
说明:
git stash 当前分支,需求开发中,有紧急bug要修复,但当前分支需求尚未完成,不能提交,要拉新的bug分支,不能包含现在未完成的内容,当前修改要无痕迹存储起来
//-------------------------------------------

//多人协作,分支代码更新和推送
$ git remote
$ git remote -v
$ git clone git@github.com:michaelliao/learngit.git
$ git push origin master
$ git checkout -b dev origin/dev
$ git push origin dev
$ git pull
$ git branch --set-upstream-to=origin/dev dev
$ git pull
$ git push oigin dev


说明:
git remote 查看远程库的信息,
git remote -v 查看远程库的详细信息
git clone git@github.com:michaelliao/learngit.git 克隆远程库的master分支到本地master
git push origin master 把该分支上的所有本地修改提交推送到远程库master分支
git checkout -b dev origin/dev 在本地创建和远程分支对应的分支
git push origin dev 把该分支上的所有本地提交推送到远程库dev分支,如果此时多人都修改了改分支,那么后一个提交的推送不上去
git pull 推送失败时,需要将远程dev的最新修改拉取一下到本地,如果有冲突,先输入下方命令,再拉取
git branch --set-upstream-to=origin/dev dev 
git pull 此时拉取后,会看到冲突内容,解决冲突再推送
git push oigin dev 重新推送

//多人协作,四大步骤

1.首先,可以试图用git push origin <branch-name>推送自己的修改;
2.如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
3.如果合并有冲突,则解决冲突,并在本地提交;
4.没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!
//-------------------------------------------

//打标签
$ git tag v1.0
$ git log
$ git tag v0.0 76dsgd
$ git tag
$ git show v0.0
$ git tag -d v0.0
$ git push origin v1.0 
$ git push origin --tags

说明:
git tag v1.0 为当前提交的版本打标签v1.0
git log 查看历史提交记录
git tag v0.0 76dsgd 根据历史提交id,为历史纪录打上标签
git tag 显示所有的标签
git show v0.0 显示指定标签的数据
git tag -d v0.0 标签不想要,删除标签,创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。
git push origin v1.0 要推送某个标签到远程
git push origin --tags 一次性推送全部尚未推送到远程的本地标签
$ git tag -d v0.9 删除本地标签
$ git push origin :refs/tags/v0.9 标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:再删除远程标签


//-------------------------------------------
//本地分支往远程指定分支推送数据(全过程)
git fetch origin master: develop (基于远程master分支内容,创建一个新的develop分支)
git clone http://xxxxx.com(从远程git库克隆到本地git库)
git pull origin test:test(从远程test分支同步到本地test分支,可以是不同分支,比如把远程的master分支内容同步到当前Dev 分支,git pull origin master:dev)
或
git pull origin test(从远程test分支拉取到当前分支)
或
git checkout -b newdev origin/dev(将远程git仓库里的指定分dev支拉取到本地(本地不存在的分支newdev))
git add .(添加修改内容到暂存区)
git commit -m "test测试" (提交到本地git仓库)
git push origin dev(推送到远程指定分支)
git branch --set-upstream-to=origin/dev dev(不想每次pull的时候都指定远程分支名,可以一次性设定本地分支每次pull对应的远程分支)
git push origin 

git branch test(创建分支)
git checkout test (切换分支)

注意:
1. git branch test 创建分支,是以你当前分支为原型创建一个test分支,如果你的当前分支不是最稳定的,你可以采用 git checkout -b test origin/test将远程分支拉取到本地不存在的分支上,默认新建
或者:git fetch origin master:tmp //从远程仓库master分支获取最新,在本地建立tmp分支

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值