git的常见用法

一、基本介绍

Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。

1、安装

具体安装过程可见Git安装

安装完成后需要配置用户信息,如下:

git config --global user.name "runoob"
git config --global user.email test@runoob.com

如果用了--global选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。

如果要在某个特定的项目里使用其它名字或者电邮,只要去掉--global选项重新配置即可,新的设定保存在当前项目的.git/config文件里。

2、工作流程

  • 克隆git资源到自己的本地,或者自己初始化一个git仓库。
  • 在本地进行修改、新增、删除。
  • 将本地资源先放到暂存区然后提交到远程git仓库。
  • 远程git仓库有更新时可以拉取最新代码。

上面我们有说到一个名词“暂存区”,在git中有这么几个概念:

  • Workspace:工作区,也就是我们的的编辑器目录。
  • Index/Stage:暂存区,一般存放在 ".git" 目录下的index文件(.git/index)。
  • Repository:仓库区,也就是本地仓库, 也就是我们的.git文件。
  • Remote:远程仓库。

二、常用命令

具体文档可见官网

1、创建仓库

(1)、git init

在当前目录创建一个Git仓库,该命令执行完后会生成一个.git文件夹,通过ls -a命令可以看到,该文件夹里主要是存放Git仓库的一些信息。

(2)、git init [repository name]

新建一个文件夹,并将其初始化为一个Git仓库。

(3)、git clone [repository url]

从指定路径的远程仓库将仓库克隆下来。

2、仓库配置

(1)、git config --list

显示当前的Git配置。

(2)、git config [--global] user.name "[name]"

设置提交仓库时的用户名。

(3)、git config [--global] user.email "[email address]"

设置提交仓库时的用户邮箱。

3、仓库分支管理

(1)、git branch

列出当前工作目录的全部本地分支,分支名前面带“*”号的代表该分支为当前分支。

(2)、git branch -r

列出当前工作目录远程仓库的全部分支。

(3)、git branch -a

列出当前工作目录的全部分支(包括本地分支和远程分支)。

(4)、git branch [branch name] [origin branch name]

在指定的分支(不指定的话就默认是当前分支)基础上创建一个新的分支。

(5)、git checkout [branch name]

切换到指定的分支。I

(6)、git checkout -b [branch name] [origin branch name]

该命令是上两条命令的合体,在指定的分支(不指定的话就默认是当前分支)基础上创建新的分支并切换到该新分支。

(7)、git branch -m oldBranchName newBranchNamegit push --delete origin oldBranchNamegit push --set-upstream origin newBranchName

修改指定分支的名字。

(8)、git branch -d [branch name]

删除指定的本地分支。

(9)、git push origin --delete [remote branch name]

删除指定的远程分支。

(10)、git branch --set-upstream [branch name] [remote branch name]

在指定的本地分支和远程分支之间建立追踪关系。

3、仓库内容操作

(1)、git add [file1] [file2] ...

将指定文件添加到暂存区。

(2)、git add [dir]

将指定文件夹添加到暂存区。

(3)、git add .

将当前工作目录的所有文件都添加到暂存区。

(4)、git commit [file1] [file2] ... -m [message]

将指定的暂存区文件提交到本地仓库,message是提交信息。

(5)、git commit -m [message]

将暂存区内容提交到本地仓库,message是提交信息。

(6)、git commit -am [message]

git addgit commit两个命令的合体,将当前工作目录的所有文件都添加到暂存区,并提交到本地仓库,message是提交信息。

(7)、git push [远程主机名] [本地分支名]:[远程分支名]

例如:git push origin master的意思就是将本地的master分支提交到origin主机的master分支,并与之合并。由于本地分支名和远程分支名相同,所以省略了冒号。git默认把远程主机名命为origin

(8)、git push [远程主机名] :[远程分支名]

例如:git push origin :master,如果省略了本地分支名,则相当于删除了指定的远程分支,因为这相当于提交了一个空的分支。

(9)、git push [远程主机名]

例如:git push origin,将本地当前分支的代码提交到远程origin主机同样名字的分支,并与之进行合并。

(10)、git push

远程主机名在远程主机名相同的情况下也可以省略,将本地当前分支的代码提交到远程同样名字的分支,并与之进行合并。

(11)、git push -u [远程主机名] [远程分支名]

将本地分支与远程分支建立关联,并推送所有内容

(12)、git pull [远程主机名] [本地分支名]:[远程分支名]

例如:git pull origin master的意思就是将远程origin主机的master分支下拉到本地,并与本地的master分支合并。由于本地分支名和远程分支名相同,所以省略了冒号。git默认把远程主机名命为origin

(13)、git push [远程主机名]

例如:git pull origin的意思就是将远程origin主机的分支(与本地当前分支分支名相同)下拉到本地,并与本地的当前分支合并。

(14)、git pull

远程主机名在相同的情况下也可以省略,将远程origin主机的分支(与本地当前分支分支名相同)下拉到本地,并与本地的当前分支合并。

(15)、git fetch [远程主机名][分支名]

例如:git fetch origin master的意思就是将远程origin主机的master分支下拉到本地。

(16)、git fetch

取回远程主机所有分支的更新。

(17)、git merge [branch name]

将指定分支的代码合并到当前分支。如果合并后有冲突,可使用git merge --abort命令终止合并。

(18)、git rebase

rebase即变基,改变基准点,假如从master分支的最新节点“1”拉出feature分支,feature分支上有两次新的提交“2,3”,master分支也有两次新的提交"4,5",这个时候如果在feature分支上执行git rebase master,则会先提取feature分支上不同于两个分支共同节点上的改变“2',3'”,然后将feature分支的基点改为"5",再将“2',3'”应用到新的基点上,目前节点为“1,4,5,2',3'”。这种情况下rebase成功之后,会显示有2个待拉取,四个待推送,如果是你个人的开发分支,这个时候可以执行git push --force origin feature。强制推送,用本地的分支状态覆盖掉远程。但是如果是公共分支的话,强制推送会导致其他同事的代码丢失,这个时候可以使用git push --force-with-lease origin feature,该命令在强制覆盖前会进行一次检查,可以避免代码被盖掉的风险。
git rebase有两个常见用法,一是通过rebase命令合并多个commit;二是类似merge命令,对代码进行合并,与merge不同的是,merge合并后会生成一个新的commit,而rebase是将之前的commit应用到你的分支上,所以并不会产生新的commit。如果合并后有冲突,可使用git rebase --abort命令终止合并。

具体可见关于merge和rebase的区别

具体可见关于rebase合并多个commit

git rebase详解(图解+最简单示例,一次就懂)

(19)、git remote

列出所有的远程主机名称。

(20)、git remote -v

列出所有的远程主机名称加地址。

(21)、git remote add [远程主机名] [仓库地址]

将本地仓库与指定远程主机的仓库相关联。

(22)、git remote set-url --add [远程主机名] [仓库地址]

不额外添加远程仓库,而是给现有的远程仓库添加额外的地址。

与上一条命令的区别可见本地Git仓库关联多个远程仓库的两种方法

(23)、git remote rm [远程主机名]

取消本地仓库与指定远程主机的关联。

(24)、git remote rename [原主机名] [新主机名]

用于给远程主机的重命名。

(25)、git checkout -- [filename]

回退工作区的修改内容,不可逆操作

(26)、git reset HEAD

回退暂存区的修改内容

(27)、git reset HEAD^

回退所有内容到上一个版本

(28)、git reset HEAD^ [filename]

回退某文件到上一个版本

(29)、git reset --mixed [commit id]

回退到指定版本,只保留源码,回退commit和index信息。

(30)、git reset --soft [commit id]

回退到指定版本,本地的源码也会变成该指定版本的内容,当前版本的内容不会丢失。

(31)、git reset --hard [commit id]

回退到指定版本,本地的源码也会变成指定版本的内容,当前版本的内容会丢失。

(32)、git push -f

git reset都是回退本地仓库的版本,若想同时回退远程的版本,则需要把本地内容进行强推。

(33)、git merge -s recursive -X theirs branch-name

merge时如果产生很多冲突,都需要选择取传入的代码,可以使用该命令一键解决冲突

4、仓库查看

(1)、git status

查看当前分支的状态,文件是否需要add,commit或者delete。

(2)、git status --porcelain

查看改动过后待提交的文件。

(3)、git log

显示当前分支的版本历史。

(4)、git log --stat

显示当前分支的版本历史,以及每次版本的变动。

(5)、git log -S [keyword]

根据关键字搜索提交历史。

(6)、git tag

列出所有的tag

(7)、git tag [tag]

新建一个tag在当前commit

(8)、git tag [tag] [commit]

新建一个tag在指定commit

(9)、git tag -d [tag]

删除本地的指定tag

(10)、git push origin :refs/tags/[tagName]

删除远程的tag

(11)、git show [tag]

查看指定tag的信息。

(12)、git push [remote] [tag]

提交指定tag

(13)、git push [remote] --tags

提交所有的tag

(14)、git checkout -b [branch] [tag]

新建一个分支,指向某个tag

5、分支内容保存、回退等命令

可参考Git不要只会pull和push,试试这5条提高效率的命令
Git 储藏(stash)详解

三、参考文章

1、Git使用小记
2、Git常用命令及方法大全
3、git rebase的两种用法
4、git rebase使用技巧
5、Git如何撤销提交(命令行+IDEA)

posted @ 2021-12-27 15:05  SummerSatr  阅读(67)  评论(0编辑  收藏  举报