git 常用命令总结

一 说明

git 是linus为了控制linux内核版本而开发的一款分布式版本控制器。版本控制器分为两类:集中式和分布式。
集中式需要设置中央服务器,工作时需要联网,本地并没有仓库,提交较慢。 而分布式的每个本地都有一份仓库,
中央服务器只是方便大家交换文件,不用联网也可工作

二:常用命令总结

2.1 安装git


debian/ubuntu:

 $ sudo apt-get install git

其他系统:先输入git, 如果没有下载,会提示下载方式。

2.2 建立仓库


git init

$ mkdir program	
$ git init

NOTE:新建一个文件夹,然后在文件夹里执行这个命令,就把该文件夹初始化成了一个版本库,在本文件夹中会产生一个隐藏的.git 文件夹,里面放的是版本控制库相关的信息,不要轻易修改,否则会出错。
本命令用于在本地初始化仓库。

git clone

$ git clone git://git.kernel.org/pub/scm/.../linux.git

NOTE:会把远程的仓库克隆到本地,一般会产生一个文件夹,这个文件夹就是仓库,克隆的和远程仓库一模一样的仓库。

2.3 用户名,邮箱,编辑器配置


git config

$ git config --global user.name "Your Name" 
$ git config --global user.email "email@example.com"
$ git config --global core.editor "vim"

NOTE:加–global设置本机全部仓库用户名和email都是这个。

$ git config  user.name "Your Name" 
$ git config  user.email "email@example.com"

NOTE:不加–global是设置单个仓库的用户名和邮箱,但是此命令必须在git仓库文件夹里执行。

$ git config  user.name 	
$ git config  user.email 
$ git config core.editor 

NOTE: 这样就可以查看git仓库的用户名和邮箱了,在单独的git 仓库文件夹中,输出的是当前git 仓库的信息,
在仓库外面,就是全局git 仓库设置的信息了。这里面包含了一个作用域的问题,不在特定的git 仓库下,输出的都是
全局git 仓库信息,在特定的git 仓库下,就是当前git 仓库的信息。

2.4 本地修改


git status

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

    modified:   CMakeLists.txt
    modified:   src/modules/example_module/CMakeLists.txt

Untracked files:
(use "git add <file>..." to include in what will be committed)

  	 config.json
   	 launch.txt

NOTE: 该命令会输出当前仓库所处的状态,修改了那些文件,新增加了那些文件,注意看英语提示即可。

git diff

在学习git diff 之前,我们需要理解以下git 的几个区域设置,工作区,暂存区,本地版本库,远程版本库。
工作区:当前git 仓库目录,就是你工作的地方,修改的地方。
暂存区:修改完,或者增加完文件,需要先把文件放到暂存区,一般通过git add命令进行一个或多个文件添加。
本地版本库:在暂存区的文件可以通过提交的方式,git commit 一次性提交到本地的版本库,会产生commit id。

git diff [path/filename]  

NOTE: 比较工作区和暂存区之间的变动,可以指定文件名,也可以不指定,不指定指全部修改。

git diff --cached [path/filename]

NOTE: 比较暂存区和最新版本的区别。

git diff commitId [path/filename] 

NOTE: 比较工作区和版本库中的commit id 的区别。

git diff --cached [<commit-id>] [<path>...]  

NOTE: 比较暂存区和工作区指定commit id 的区别

git diff [<commit-id>] [<commit-id>] 

NOTE: 比较两个commit id 之间的差别,就加一个commit id 比较的是工作区和暂存区。

NOTE:一般只需要用git diff 查看目前修改,提交到本地之后 git diff HEAD^ HEAD 进行比较即可。关于以什么为参考,我只能告诉你,git diff HEAD^ HEAD 参考是 HEAD^

git add

git add filename.... 

NOTE: 添加修改的文件到暂存区

git add -A 

NOTE: 添加当前文件夹下所有被修改或添加的文件到暂存区。

git add -u 

NOTE: 添加所有tracked 文件地修改到暂存区。

git commit

git commit -s   

NOTE: 提交并签名

git commit -m "message" 

NOTE: 提交,把信息message 作为commit info

git commit --amend  

NOTE: 修改提交,不会再产生一个新的commit

git config --global core.editor "vim"

NOTE:配置编辑信息的软件为vim

git stash

git stash save "message"

NOTE: 暂时保存目前的进度,并写一些标志信息。

git stash list

NOTE:查看所有的stash,stash@{0}是标志,pop或者apply的时候要用。

git stash pop [stash id] 

NOTE:把指定的stash id 恢复到工作区。不指定则把最新的工作状态恢复到工作区。然后删除该stash. 所谓最新的就是stash list 所列出的第一个。

git stash apply [stash id]

NOTE:除了不删除stash外,其他与git stash pop都一样。

git stash drop [stash id]

NOTE:删除指定的stash,若不指定stash id ,则删除最新的。

git stash clear

NOTE:删除所有的stash

2.5 提交历史查看


git log

git log 

NOTE: 直接用即可,会输出版本库。

2.6 分支和标签


git branch

git branch 					

NOTE: 获得当前本地仓库的分支列表

git branch -r 			  	

NOTE: 查看远程版本库分支列表

git branch -a 			    

NOTE: 输出本地和远端的所有分支

git branch branch1 			

NOTE: 生成一个新的branch, 名字叫branch1

git branch -d branch1  		

NOTE: 删除一个名为branch1的分支

git branch -vv  			

NOTE: 输出本地分支与之相对应的远程分支

git branch -m oldname newname 

NOTE: 修改分支名

git checkout

git checkout branchName	

NOTE: 切换到分支名为branchName的分支。

git checkout	-b 	branchName	

NOTE: 如果存在,就只切换分支,如果不存在则建立一个分支并切换。

git checkout filename 		

NOTE: 放弃对文件的修改,用暂存区里的相同的文件覆盖工作区。

git checkout .						

NOTE: 放弃当前目录下所有文件的修改。

git tag

TODO

2.7 更新和发布


git remote

git remote 					

NOTE: 不带任何参数,将会输出远程主机

git remote -v				

NOTE: 可以查看远程主机的网址

git remote show <主机名>		

NOTE: 命令加上主机名,可以查看该主机的详细信息

git remote add <主机名> <网址>	

NOTE: 添加远程主机,统一项目放在了不同主机,两份,这个 时候就可以添加远程主机了。

git remote rm 	<主机名>				

NOTE: 命令用于删除远程主机

git remote rename <原主机名> <新主机名> 

NOTE: 重命名主机名

git fetch

git fetch <远程主机名>   

NOTE: 这样会把远程主机的所有更新拉到本地,只是单纯的拉到本地,对本地分支没有任何影响

git fetch <远程主机名> <远程分支名> 

NOTE: 把远程主机的该分支拉到本地,拉特定分支。所取回的更新,在本地主机上要用远程主机名/分支名方式读取。

git checkout -b newBranchName 远程主机名/分支名  

NOTE: 这样就代表,在远程取回的该分支基础上建立一个新的本地分支。

git pull

git pull <远程主机名> <远程分支名>:<本地分支名>	

NOTE: 拉远程分支并合并到指定本地分支

git pull <远程主机名> <远程分支名> 	

NOTE: 拉远程分支合并到当前本地分支

git push

git push <远程主机名> <本地分支名>:<远程分支名>   

NOTE: 将本地分支推送到远程分支,若远程分支不存在,则会创建。

git push --force <远程主机名> <本地分支名>:<远程分支名> 

NOTE: 将本地分支强制推送到远程分支,若远程版本比本地版本新,则会覆盖。

2.8 合并和变基


git merge

git merge <branch-name> 

NOTE: 把名为branch-name 的分支,合并到当前分支。

git cherry-pick

git cherry-pick <commit-id> 

NOTE: 把指定的commit-id合并到当前的分支,若有冲突就需要修改,修改成自己想要的形式,
然后git add , git commit ,提交新的commit. 该命令的主要左右就是把指定commit-id , 无论是哪个分支
上的,都可以合并到本分支。

git rebase

git rebase <branch-name> 

NOTE: 以branch-name 为branch名的branch,为基,重新设置base

NOTE:整体流程:

git rebase ---> 存在冲突,rebase停止,解决冲突---> git add (无需commit)
--->git rebase --continue  -->想中途停止,git rebase --abort

2.9 撤销


git reset

git reset --hard <commit-id> 

NOTE: 回退到指定commit-id版本,并舍弃修改的文件

git reset --soft <commit-id>

NOTE: 回退到指定的commit-id版本,但不舍弃修改的文件,而是放置在暂存区。

git revert

git revert <commit-id>

NOTE: 撤销该次提交,并把这次撤销操作再产生一个commit, 和reset 的区别就是,reset 是直接把该
commit 去掉,而revert则是单纯的删除这次提交的内容,并生成新的提交,而之前的commit还是存在的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值