Git的使用命令



Git的使用命令
 
 

将已有的代码目录作为仓库新增到git中:

进入到代码目录中

git init

git add README.md  (如果需要才进行该命令)

git commit -m "first commit" (如果上一个命令执行了才进行该命令)

git remote add origin 你的git仓库地址(ssh或者https格式都可以,如果没有该新仓库,则需要手动先新建)

git add . 

git commit -m '新增代码'

git push -u origin master

检出远端到本地:

git clone https://github.com/wsluozefeng/git_test.git

查看当前git情况:

git status

创建分支:

git branch           分支名:创建“本地分支”

git checkout       分支名: 切换分支

git checkout -b 分支名: 新建“本地分支”并且切换,等效上面2句命令

查看分支:

git branch:    查看“本地”分支情况

git branch -r: 查看“远端”分支情况

git branch -a:查看远端和本地的所有分支

重命名分支: 

git branch -m | -M oldbranch newbranch (如果newbranch名字分支已经存在,则需要使用-M强制重命名,否则,使用-m进行重命名。)

删除本地分支:

git branch -d | -D 分支名称:删除和强制删除“本地分支”

删除远端分支2个步骤:

git branch -d -r origin/分支名  :只是删除的本地对该远程分支的track,并非真正删除,虽然使用git branch -r 查看不到该分支

git push origin :分支名:通过push一个空分支,表示真正删除该分支

基于某分支创建本地新分支,且推送到远端,例如基于master创建新分支new_branch

1. 进入master分支: git chekcout master

2. 创建分支:            git branch new_branch_name

3. 前面可以做任何操作,比如新增文件,修改文件等等,git commit之后,最后一个就是将分支新建到远端版本中去: git push origin 分支名

本地拉取远端分支:

假设远端分支是:order-gift,本地如何拉取order-gift分支

1. git fetch origin :拉取远端主机最新的代码,在本地主机上要用”远程主机名/分支名”的形式读取,例如origin/order-gift

2. git checkout -b my_local_order-gift(本地分支名称) origin/order-gift(本地的远端分支)

提交操作:

1. git add:      新增文件到“索引文件中”,文件带路径,如果是新增的文件需要先git add,更新的文件如果不使用该操作,需要在git commit 中添加-a的参数

2. git commit -a:提交当前的所有改动 到“本地版本库”,如果新增和修改的文件都通过git add操作过,-a参数可去除

3. 弹出记录日志的操作,使用编辑模式进入写入日志后保存离开即可

4. 在git push之前需要拉取当前分支的最新代码,并且合并,如果有冲突且处理冲突, 如果没有任何新代码就不需以下操作

   git fetch origin :          拉取origin下的所有分支的最新修改的代码提交到本地,显示结果中,也可通过commit_id查看日志,如下图

 
Git的使用命令
 

   git diff my_local_order-gift(本地分支名称) origin/order-gift(远端分支全路径): 查看本地版本库与远端版本库的差别

   git merge origin/order-gift :合并本地版本库和远端版本库的代码,有冲突得解决冲突,如果存在本地未commit的修改,需要先commit或者git stash暂存起来,否则无法合并

   git diff HEAD:               比较工作目录 与 本地版本库 的区别 看是否有问题, 由于git merge的操作,本地版本库已经与远端版本库一致了

5. 合并后再一次提交代码到本地版本库: git commit -a

6. git push origin 远端分支:      提交的远端服务器版本库, origin表示的是git服务器的远程主机,远端分支必须是全路径

ps:在每次本地工作完成后,都会做一个git commit 操作来保存当前工作到本地版本库, 此时会产生一个commit-id,这是一个能唯一标识一个版本的序列号。 在使用git push后,这个序列号还会同步到远程版本库。

查看当前分支的日志(如果没有合并该分支最新的代码,那么看到的将不会包含新代码中的日志记录,所以在必须先确保当前分支是最新代码,如果不是最新代码可通过 git fetch 拉取最新代码):

git log

git show 5aa1be6674ecf6c36a579521708bf6e5efb6795f(日志sha) 路径+文件名

git log --pretty=oneline  将日志精简显示成一行

查看当前分支的某个文件的日志

git log 路径+文件名

git show 5aa1be6674ecf6c36a579521708bf6e5efb6795f(日志sha) 路径+文件名

git log --pretty=oneline 路径+文件名

查看远端某个分支的日志(如果不是最新代码,需要通过git fetch拉取)

git log origin/order-gift

git log origin/order-gift -2  查看远端order-gift分支的最后3个日志

查看命令历史:git reflog   

文件比对:

git diff:         是查看 工作目录 与 索引文件 的差别的。

git diff --cached:是查看 索引文件 与 本地版本库 的差别的。

git diff HEAD:    是查看 工作目录 和 本地版本库 的差别的。(HEAD代表的是最近的一次commit的信息)

git diff HEAD -- readme.txt : 查看工作区和版本库里面最新版本的区别。

 修改暂存:

假设您正在为您的产品实施的一项新功能。你的代码是在推进开发进度而客户不断升级需求突然来了。正因为如此,你必须保持放下你的新功能,工作几个小时。你不能提交你的部分代码,也不能扔掉你的变化。所以,你需要一些临时空间,在那里你可以存储你的部分修改,以便以后再提交

git stash:      将当前工作目录的改变都保存在堆栈了,现在可以对该目录进行别的开发操作

git stash list:查看当前工作目录的堆栈情况

git stash pop: 将保存在暂存堆栈的第一个(stash@{0})修改删除,并且还原到“当前目录”中,必须是在该代码所属修改的分支中去操作,如果存在冲突就解决冲突,如果暂存堆栈中有多个修改,可以使用git stash pop stash@{num},num 就是你要恢复的工作现场的编号,通过git stash list 可查看,使用git stash apply stash@{num}方法 除了不在stash队列删除外其他和git stash pop 完全一样

分支合并:(建议使用变基的方式,变基相关:https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%8F%98%E5%9F%BA)

将分支order-gift合并到master

1. git checkout master

2. git pull 或者 git fetch origin + git merge origin/master  :保证master分支是最新代码

3. git checkout order-gift

4. git rebase master       :将order-gift的修改变基到master中去

5. git checkout master

6. git merge order-gift    :合并  

7. git commit

8. git push origin master

ps:

变基(rebase)原理:

这rebase命令会把你的"order-gift"分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),

然后把"order-gift"分支更新 为最新的"origin"分支,最后把保存的这些补丁应用到"order-gif"分支上。

变基冲突解决:

在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决冲突,此时代码处于 (no branch)状态, 通过git branch可查看;


Git的使用命令
 

在解决完冲突后,用"git add ."命令去更新这些内容的索引(index), 然后,你无需执行 git commit,只要执行:

$ git rebase --continue

这样git会继续应用(apply)余下的补丁。

在任何时候,你可以用--abort参数来终止rebase的行动,并且"order-gift" 分支会回到rebase开始前的状态。

$ git rebase --abort

针对工作目录的撤销:

git reset --hard HEAD :      丢弃工作目录的所有修改(没有commit前的),并且代码还原为当前最新commit的

git reset --hard HEAD~1 :    将工作目录的代码还原到上一个commit

git reset --hard commit_id : 将工作目录的代码还原到commit_id对应的

git reset --hard origin/分支 : 

针对暂存目录的撤销

git reset HEAD (文件) :将暂存区中的修改还原到当前的commit,也就是取消最近的而一次git add 操作,也可以单个文件操作

针对某个文件的版本回滚(commit_id:XXX1, 文件:a.php)

方法1:

git reset XXX1 a.php : 将代码回滚

git commit -a -m 'a.php文件回滚到版本XXX1'    :提交到本地仓库

git checkout -- a.php                         :将文件还原到xxx1版本

git push

方法2

git checkout   XXX1  a.php

丢弃工作区修改的命令:git checkout -- file

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加暂存区后的状态。

总之,就是让这个文件回到最近一次git commit或git add时的状态。

注意:git checkout -- file命令中的--很重要,没有--,就变成了“创建一个新分支”的命令

列出所有远程主机:git remote

查看远程主机的网址:git remote -v 

查看该主机的具体情况:git remote show 主机名 

 

删除文件:git rm 文件1 文件2 .....  之后也需要git commit 和git push操作

删除目录:git rm -r 文件夹  之后也需要git commit 和git push操作

移动目录或文件:git mv 旧路径(+文件名)  新路径 之后也需要git commit 和git push操作

增加.gitignore文件来忽略某些文件,该文件需要建立在与.git目录同级下

.gitignore文件中的写法:

index.php #忽略 当前目录下的index.php文件

/public   #忽略 当前目录下的public目录及其里面的所有内容

这里能够直接忽略的是没有被跟踪的文件,如果需要忽略已经被跟踪的文件,需要先执行一下命令后,在再.gitignore文件中添加该文件名

git update-index --assume-unchanged 文件名

如果需要放弃该忽略,执行下面命令:

git update-index --no-assume-unchanged 文件名

ps:这种已被跟踪的文件忽略,即使其他人修改了该文件后提交,你在自己的git中更新代码,是不会发生冲突现象,因为他会直接覆盖该文件

相关推荐