git常用命令

查看git的所有命令

git

查看git版本

git --version

初始化仓库,如果window警告未能初始化,可以临时关闭Windows Defender

git init

查看仓库当前的状态

git status

将工作区的修改撤销(add之前)

git checkout -- src/pages/readme.txt

添加文件到暂存区

git add readme.txt

将暂存区的修改撤销(add之后)到工作区

git reset HEAD -- gao.txt

添加所有至暂存区

git add .

添加所有至暂存区(不包括新增)

git add -u

添加所有至暂存区(包括删除和新增)

git add --all/-A

把暂存区的所有内容提交

git commit -m "wrote a readme file"

提交时跳过eslint检测

git commit -m "wrote a readme file" --no-verify

查看工作区与暂存区的内容对比

git diff

查看HEAD与 暂存区 的差异

git diff --cached 或者 git diff --staged

查看工作区、暂存区与 HEAD 的差异

git diff HEAD

查看工作树与HEAD的差异 或者 比较指定文件的差异

git diff commitId 或者 git diff commitId -- gao.txt

比较2次提交的差异,或文件的差异

git diff commitId01 commitId02 / git diff commitId01 commitId02 -- gao.txt

查看最近一次的commit所做的修改

git show

查看某次commit的修改内容

git show commitId

查看某次commit的指定文件的修改

git show commitId gao.txt

显示提交的记录信息,输入q即可退出

git log

查看最后一条日志记录

git log -1

查看所有提交的详细变更记录

git log -p

显示提交的简明信息,reset --hard后删掉的commitId也可以找回

git reflog

查看到分支合并图

git log --graph --pretty=oneline --abbrev-commit

===============================

版本回退、撤销

git reset HEAD

是将暂存区和HEAD的提交保持一致(将暂存区的东西撤销回工作区)

git reset --hard HEAD

是将工作区、暂存区和HEAD保持一致(撤销工作区和暂存区的修改,回退至最后一次的提交)

git reset --hard HEAD^

回退至上一个版本,上上一个版本就是HEAD^^,往上100个版本HEAD~100

git reset --hard commitId

回退至某一个版本,commitId 是提交的id

git checkout

查看修改的文件目录

git checkout src

撤销src下所有工作区的修改

git checkout ./

撤销当前目录在工作区所有的修改

===============================

改变本地和远程分支的名字

git branch -m old_branch new_branch

重命名本地分支名称

git push origin :old_branch / git push --delete origin oldName

删除远程分支

git push --set-upstream origin new_branch / git push origin new_branch

推送新分支,关联远程分支

===============================

创建SSH Key

- 创建SSH Key
    - 用户主目录下是否有.ssh目录,其下是否有id_rsa和id_rsa.pub
    - 没有则创建
        - ssh-keygen -t rsa -C "[email protected]"
- 点击“Account settings”,“SSH Keys”页面,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容,点“Add Key”,你就应该看到已经添加的Key

===============================

pull、fetch

git pull

读取远端数据库分支的修改内容

git pull origin dev

拉取远程分支到本地的一个分支,pull 会进行拉取并且合并,fetch+merge

git merge origin/dev

合并远程分支

git fetch

查看远端与本地差异,只拉取,不合并,远端的新内容在FETCH_HEAD指向上
可以合并FETCH_HEAD,也可以pull

===============================

关联推送至远程库

- 首先,登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库master:
- git remote add origin(远端数据库名字) [email protected]:xxx.learngit.git(本地git仓库关联远程库)
- git push -u origin master(推送至远程库)
- git push (第二次推送)
- 当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告:填yes回车即可
- git push orign dev 远程已有/没有dev分支,本地dev关联/新建远程dev并推送至远程dev
- git remote add   复制远程仓库
- git checkout remote_branch_name 创建远程分支的本地分支
- git branch remote_branch_name origin/remote_branch_name 同上
- git clone 复制现有的远程仓库
- git clone 项目地址 本地项目名(clone并重命名项目)
- Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。
- https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令

===============================

本地分支变更关联的远程分支的映射关系,查看本地和远程的映射关系

git branch --unset-upstream

撤销映射关系

git branch -u origin/分支名

其中origin/分支名 分支名为远程分支名

git branch --set-upstream-to origin/分支名

其中origin/分支名 分支名为远程分支名

git branch -vv

查看本地分支与远程分支的映射关系。

===============================

远程分支操作

git br -r

查看远程分支

git br -a

查看所有分支,包括本地和远程

===============================

分支创建、合并

git checkout -b dev

创建dev分支,然后切换到dev分支

git branch dev

创建分支

git checkout dev

切换分支

git push origin develop

创建远程分支

git branch

命令查看当前分支 

git merge dev

在master分支使用该命令,合并到master分支上,合并记录复杂

git merge --abort

取消合并

git rebase dev

在feature分支使用该命令,feature分支拉取dev分支最新的内容,再追加到最新提交的后面,这样历史记录是一条线,没有分叉,简洁明了。
// 比如,dev分支初始提交为b节点,然后分别检出f1分支和f2分支
// f1分支继续提交了自己的c,d提交并合并至dev分支,此时dev分支为b-c-d
// f2分支也提交了2次,为c1,d1
// 此时对f2进行变基操作,当前应处于f2分支,运行git rebase dev
// 则f2分支提交记录变成了b-c-d-c1-d1,之前f2的基底为b节点,此时变成了d节点,是为变基。

git rebase --continue

解决冲突后使用该命令提交

git rebase --abort

取消rebase合并

冲突

在两个分支上同时修改同一个文件并都commit了,合并时就会报冲突,手动解决冲突,再次git add,git commit,merge模式使用commit提交(非ff模式),rebase模式使用--continue

git merge --no-ff -m "merge with no-ff" dev

强制禁用fast forward模式,可以看到分支历史
// 使用ff模式,HEAD的指向移动到最新的合并分支的提交节点
// 不使用ff模式,HEAD的指向一个新的提交节点(合并分支向前一个节点)

git cherry-pick commitId

将某些特定的提交合并到当前分支(适用部分功能提前上线)

===============================

分支删除、重命名

git branch -d dev

删除dev分支

git branch -D feature1

强制删除功能分支(合并之前进行删除)

git branch -r -d 分支名

删除远端分支

git push --delete origin dev

删除远端dev分支
- git branch -m dev dev1 将dev重命名dev1

===============================

stash的使用,第一次使用需要add,以后不需要

git stash save "save message"

执行存储时,添加备注。

git stash list

查看stash列表

git stash show

显示做了哪些改动,比如第二个 git stash show stash@{1},,默认对第一个有效

git stash show -p

比如第二个:git stash show  stash@{1}  -p

git stash apply

应用某个存储,但不删除,比如第二个:git stash apply stash@{1} 

git stash pop

应用并删除,比如应用并删除第二个:git stash pop stash@{1}

git stash drop stash@{$num}

丢弃stash@{$num}存储

git stash clear

删除所有缓存的stash

===============================

改写提交的message

git commit --amend

改写最后一次提交的message

git rebase -i commitId

更改某次的提交message,单个或者多个msg修改,将需要修改的pick改为reword,保存,在弹出的窗口中修改message,保存,如果是多个,则依次修改保存

git revert HEAD

最近的一次提交被取消

git revert commitId

撤销某次提交,并生成新的commitId

git revert -m 1 bd86846

-m说明本次revert的是merge commit,1说明保留ba25这个提交,如果是2要则是保留1c70这个提交
image.png

git reset --hard commitId/HEAD~~

删除/回退提交,回退至commitId这次提交/回退至HEAD~~版本

git reset --soft HEAD^

将上次的提交撤回,代码会保存在暂存区

git cherry-pick c81dba1

在当前分支上添加另一个分支上特定的提交,只是复制提交

git rebase -i HEAD~~/HEAD~2

合并提交,将最后2次提交合并为1个提交,并将第2行中的pick改为squash保存退出即可
// HEAD是当前指向,HEAD~~是再向后移动两个指向,上述命令是将最后一个提交记录(commitID)删除,但是内容不删除。
// squash在哪一行,该提交将被合并,合并至该提交的上一次提交上
// 要去掉HEAD上的提交记录,应写HEAD~~

git rebase -i HEAD~~/commitId

修改某次的提交内容及注解,pick改为edit,保存退出后,修改内容(不改内容就只改注解),然后add(只改注解不需要add),ci --amend ,再git rebase -continue
哪行的pick改为edit,就表示要改哪个提交;要改HEAD~2,cid应该为HEAD~3,遇到冲突解决后add后,直接git rebase continue即可

git merge --squash dev

将dev中的所有提交合并为一个提交并合并到master分支中

多人协作

git remote

查看远程库的信息

git remote -v

显示更详细的信息

git remote rm origin

删除远程库

git remote add origin [email protected]:xxxx.git

创建远程库

git checkout -b dev origin/dev

创建本地dev分支,进行开发

git push origin master或者dev

推送至分支或者主分支

git push origin dev

推送至dev分支
- 同时其他人改了同一个文件并进行推送,就发生冲突

git branch --set-upstream-to=origin/dev dev

指定本地dev分支与远程origin/dev分支的链接
    - 再git pull
    - 手动解决冲突,提交后再push
    - HEAD -> master)和(origin/master)标识出当前分支的HEAD和远程origin的位置分别是commit id 

创建标签

git checkout master

首先,切换到需要打标签的分支上

git tag v1.0

标签名为v1.0

git tag

查看所有标签

git tag v0.9 commitId号

忘了就找到id打上标签

git show

查看标签信息

git tag v0.1 -am "version" 1094adb

创建带有说明的标签,用-a指定标签名,-m指定说明文字

git tag -n

显示tag列表及注解

git tag -d v2.0

删除标签

操作标签

git push origin

推送某个标签到远程

git push origin --tags

一次性推送全部尚未推送到远程的本地标签

git tag -d v0.1

本地删除标签

git push --delete origin tagname

从远程删除

自定义Git

根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。

git add .gitignore

添加忽略文件

git commit -m "添加了忽略文件列表"

    - 以斜杠 “/” 结尾表示目录;css/
    - 以星号 “*” 通配多个字符;*.js
    - 忽略根目录下的 css 文件夹/css
    - 忽略所有的css文件夹css/
    - git add -f App.class 强制添加到Git
    - git check-ignore -v a.txt文件名 检查忽略的文件是否在.gitignore文件中
    - .gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!

git config --global color.ui true

让Git显示颜色

git config --global alias.st status

配置status为st,配置别名
- 其他设置还有co ci br lg

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

查看分支图,设置多种颜色

不能跟踪的文件类型

- 图片、视频、Microsoft的Word这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化
- 千万不要使用Windows自带的**记事本**编辑任何文本文件
- 强烈建议使用标准的UTF-8编码

参考地址:

https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

git速查表

git_big_jb51.jpg

你可能感兴趣的:(git常用命令)