git常用操作

有些操作还没有用到,慢慢补充完善

一、常用操作

1. git config

配置git

//设置全局变量
git config --global user.name "xxx"
git config --global user.email "xxx@gmail.com"

//查看所有config
git config --list

2. git add

将修改添加到暂存区

git add .   //将所有修改添加到暂存区

工作区(Working Directory)
就是在电脑里能看到的目录,比如learngit文件夹就是一个工作区:
版本库(Repository)
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
把文件往Git版本库里添加的时候,是分两步执行的:
是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
在这里插入图片描述

3. git clone

克隆代码

git clone xxx   //从远程仓库克隆代码

git pull时报错:ssh: connect to host github.com port 22: Connection refused,需要更换仓库地址,例如从https换成ssh

4. git status

文件,文件夹在工作区,暂存区的状态

git status  

git status分为三种:Untracked files、Changes not staged for commit、Changes to be committed
Untracked files:git add 前,之前文件不存在
Changes not staged for commit:git add 前,之前文件已存在
Changes to be committed:git add后,git commit前

5. git diff

比较不同

  • git diff <file>
    工作目录文件和暂存区文件进行比较
  • git diff <id1><id1><id2>
    比较两次提交的差异
  • git diff <branch1> <branch2>
    比较两个分支
  • git diff --staged
    暂存区和版本库差异
  • git diff --cached
    暂存区和版本库差异
  • git diff --stat
    比较统计信息

git diff: 当工作区有改动,暂存区为空,diff的对比是“工作区与最后一次commit提交的仓库的共同文件”;当工作区有改动,暂存区不为空,diff对比的是“工作区与暂存区的共同文件”。
git diff --cached 或 git diff --staged:显示暂存区(已add但未commit文件)和最后一次commit(HEAD)之间的所有不相同文件的增删改
git diff HEAD:显示工作目录(已track但未add文件)和暂存区(已add但未commit文件)与最后一次commit之间的的所有不相同文件的增删改

6. git commit

提交

git commit -m 'xxx'   //将索引的当前内容描述更改的用户和日志信息一起保存在新的提交中。

7. git reset

回退版本,或者把暂存区的修改回退到工作区

  • git reset --hard commit_id
  • git reset --soft commit_id或者git reset commit_id

8. git rm

删除远程仓库内容

git rm text1.txt

9. git mv

用于移动或重命名一个文件、目录或软连接

git text.txt mydir
//等价于下面三条命令:

mv test.txt mydir/
git rm test.txt
git add mydir

10. git branch

分支

  • git branch/git branch --list
    查看本地分支
  • git branch -r
    查看远程分支
  • git branch -a
    查看所有分支(远程分支+本地分支)
  • git checkout -b dev origin/dev
  • git checkout dev
    切换分支(从远程checkout dev分支,本地命名为dev,并切换到该分支)
  • git merge dev
    将dev分支合并到当前分支
  • git push origin --delete dev
    删除远程dev分支
  • git branch -D dev
    删除本地分支
  • git branch -m xxx
    重命名本地分支
  • git branch -vv
    查看本地分支和远程分支的对应关系

11. git checkout

检出,最为常用的两种情形是创建分支和切换分支。

  • git branch branchName
    创建新分支
  • git checkout branchName
    切换到新分支
  • git checkout -b branchName
    创建新分支并切换到新分支

HEAD是checkout的灵魂,checkout后HEAD指向会改变

cat .git/HEAD  //查看head指向
>>> ref: refs/heads/master
cat .git/refs/heads/master  //最新版本号
>>> 37e16039099f6eee0552f8bd9a447ac1c1874865  
git log --oneline
>>> 37e1603 (HEAD -> master, origin/master, origin/HEAD) 合并代码

12. git merge

合并代码

git merge dev 			//将dev合并到当前分支

13. git log

查看提交历史记录

  • git log --oneline/git log --pretty=oneline
    以精简模式显示
    在这里插入图片描述
  • git log --graph
    以图形模式显示
  • git log --stat
    显示文件更改列表
  • git log --author= 'name'
    显示某个作者的日志
  • git log -p filepath
    查看某个文件的详细修改
  • git log -L start,end:filepath
    查看某个文件某几行范围内的修改记录
  • git log --stat commitId 或者 git show --stat commitId
    查看某一次提交的文件修改列表

14. git stash

把当前未提交的修改暂存起来,让仓库还原到最后一次提交的状态。常用于更新、同步代码或者保存多个修改版本等情况下,可跨分支。

注:在未add之前才能执行stash!!!!

  • git stash [save message]
    保存,save为可选项,message为本次保存的注释
  • git stash list
    所有保存的记录列表
  • git stash show -p
    显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p
  • git stash apply
    应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1},可恢复多次
  • git stash pop
    命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,通过git stash list可查看具体值,比如应用并删除第二个:git stash pop stash@{1}。只能恢复一次
  • git stash drop stash@{num}
    删除某个保存,num是可选项,通过git stash list可查看具体值
  • git stash clear
    删除所有保存

15. git tag

tag是git版本库的一个标记,指向某个commit的指针。tag 是一个点,是不可移动的。

创建 tag 是基于本地分支的 commit,而且与分支的推送是两回事,就是说分支已经推送到远程了,但是你的 tag 并没有,如果把 tag 推送到远程分支上,需要另外执行 tag 的推送命令。

(1) 创建tag

  • git tag <tagName>
    创建本地tag

  • git tag -a v0.1.0 -m "release 0.1.0 version"
    创建附注标签

  • git push origin <tagName>
    推送到远程仓库,指定一个tag

  • git push origin --tags
    push所有tag

以上是基于本地当前分支的最后的一个commit 创建的 tag ,但是如果不想以最后一个,只想以某一个特定的提交为tag ,也是可以的,只要知道commit 的id。git log --pretty=oneline查看当前分支的提交历史 里面包含 commit id

  • git tag -a <tagName> <commitId>
    以历史版本作为tag
  • git tag -a <tagname> -m "XXX..."
    指定标签信息

(2)查看tag

  • git show <tagName>
    查看本地指定 tag:

  • git tag 或者 git tag -l
    查看本地所有 tag:

  • git ls-remote --tags origin
    查看远程所有tag

(3)删除tag

  • git tag -d <tagName>
    删除本地tag

  • git push origin :<tagName>
    删除远程tag

(4)检出tag

  • git checkout -b <branchName> <tagName>
    检出tag到新分支
  • git checkout [tagname]
    切换tag

因为 tag 本身指向的就是一个 commit,所以和根据commit id 检出分支是一个道理。
但是需要特别说明的是,如果我们想要修改 tag检出代码分支,那么虽然分支中的代码改变了,但是 tag标记的 commit还是同一个,标记的代码是不会变的,这个要格外的注意。

16. git fetch

从远程获取代码库

git fetch origin/master  //从master分支拉取代码

17. git pull

从远程获取代码库,并自动合并

git pull和git fetch的区别
git fetch:是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。
git pull:则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。
在这里插入图片描述

18. git remote

用于在远程仓库的操作

  • git remote -v
    显示所有远程仓库
  • git remote show [remote]
    显示某个远程仓库的信息
  • git remote add [shortname] [url]
    添加远程版本库

提交到 Github
git remote add origin xxx.git
git push -u origin master

  • git remote rm name
    删除远程仓库
  • git remote rename old_name new_name
    修改仓库名

19. git rebase

20. git restore

  • git restore --worktree [file]
    表示撤销工作区的的修改,参数等同于 -W
  • git restore --staged
    表示撤销暂存区的修改,将文件状态恢复到未 add 之前,参数等同于 -S
  • git restore -s HEAD~1
    表示将当前工作区切换到上个 commit 版本
  • git restore -s [commit id]
    表示将当前工作区切换到指定 commit id 的版本

二、操作场景

1. 提交代码

  1. git add .
    将本地所有修改了的文件添加到暂存区
  2. git commit -m ''
    提交信息,将索引的当前内容与描述更改的用户和日志消息一起存储在新的提交中
  3. git pull origin
    拉取远程最新代码,完成之后打开代码查看有没有冲突,并解决,如果有冲突解决完成以后再次执行1跟2的操作
  4. git push origin master
    将代码推至远程

2. git 放弃本地修改,强制拉取更新

开发时,对于本地的项目中修改不做保存操作(或代码改崩),可以用到Git pull的强制覆盖

  1. git fetch --all
    指令是下载远程仓库最新内容,不做合并
  2. git reset --hard origin/master
    把HEAD指向master最新版本

3. 版本回退

场景1:改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,执行命令
git checkout -- file

场景2:不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改
(1)用命令git reset HEAD <file>
(2)第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,没有推送到远程库,想要撤销本次提交,执行命令
(1)git log:查看版本号
(2)git reset --soft/hard <commit_id>

git reset缺省为git reset --soft
二者区别:
git reset --soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
git reset --hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit中所包含的更改被冲掉

在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上个版本是HEAD^^,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。
git reset --soft/hard HEAD^:回退到上一个版本
git reset --soft/hard 1094a:回退到指定版本,版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位

场景4:执行了git reset --hard,后悔执行了这个操作,想要回退到最新版本
(1) git reflog:查看历史,确定回退版本号
(2)git reset --soft/hard <commit_id>

三、常见错误

1. ssh: connect to host github.com port 22: Connection refused
  • 查询远程仓库地址
	remote -v
	
	factory https://github.com/jacksyang/factory (fetch)
    factory https://github.com/jacksyang/factory (push)
    origin  git@github.com:lam-team/logmon-web.git (fetch)
    origin  git@github.com:lam-team/logmon-web.git (push)
  • 删除远程仓库
	git remote rm origin
  • 添加http远程仓库
	git remote add origin https://github.com/lam-team/logmon-web.git
  • 将新添加的远程仓库和本地仓库关联起来
	git branch --set-upstream-to=origin/master master
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值