Git经常使用命令

git经常使用命令

  • git不会上传空文件夹,因此通常咱们为了保持文件夹能正常上传,会在文件夹内建立一个 .gitkeep(保持git上传,意思是这个文件夹我要提交上去)的文件来保证文件夹被上传上去。
  • 在远端仓库fork别人的代码就至关于复制一份到本身的仓库,你的修改并不会影响被fork的代码。好处在于我修改fork的代码就有权利提交过去,他们就能接到通知,只要那边审核经过,能够将我修改的代码合并到对方的代码中去(作开源项目经常使用)。
  • 在git服务端同样有本地端类似的命令,能够提交给被fork的人的项目中去。
$ git <命令> --help  ## 打开对应命令的离线文档,列出来的很详细
$ git <命令> -h      ## 查看当前命令的用法,列出经常使用的,不详细

$ git init  ## 初始化文件目录为git所管理,会建立一个.git目录,存储git管理的基本信息。


$ git status  ## 查看git管理文件的状态。status命令会常用,它能提示你不少信息,须要注意观察。
On branch test  ## 当前所在的分支
Your branch is behind 'origin/test' by 1 commit, and can be fast-forwarded.## 提示当前分支有一处提交(来着origin远端仓库)
## 下面的提示信息是提示你接下来能够用哪些命令
  (use "git pull" to update your local branch) ## 提示拉取远端仓库信息到本地
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:   app/.eslintrc
        modified:   build/config/webpack.path.js
        modified:   client/.eslintrc



$ git checkout -- <file>  ## 修改后还未提交值暂缓区(未 add)。可使用通配符(撤消后没法在找回数据)。

$ git add .   ## add只是添加到了 暂存区。
warning: LF will be replaced by CRLF in 1.txt.
The file will have its original line endings in your working directory. 
## LF表示换行符号,CRLF是Carriage-Return Line-Feed的缩写,意思是回车换行,就是回车(CR, ASCII 13, \r) 换行(LF, ASCII 10, \n)。换行在有的ASCII码表也用newline(简nl)来进行表示,这里的lf是line feed的概念,意思是同样的。    将LF格式的替换成CRLF格式的。
$ git add <文件|文件夹>

$ git rm --cached <file>  ## 将add进 暂存区 的文件给移除掉。(不经常使用)
$ git rm --cached .
fatal: not removing '.' recursively without -r ## 提示失败,这里提示的是若是先批量删除须要追加一个 -r ,以下:
$ git rm --cached . -r  ## 表示递归删除全部


$ git commit -m '消息' ## 提交至本地 git 的版本库中,若是不加-m消息的话,会用vi编辑器提醒你去写入一个消息,若是不写入会中断这次的提交(空的字符串也会被中断)。  commit后会被添加到 Git 仓库。   填写好消息(-m)有利于后期代码回滚/维护/找回
## 若是以前文件 add 过一次,再次修改工做区的文件想直接跳过 add 的操做能够以下:
$ git commit -a -m "消息"  ## 此命令只会提交以前add的文件,没有被add的文件不会提交到本地的git仓库中去。


## 比较暴力的覆盖,表示会将暂存区和工做区的文件都给覆盖掉。
$ git reset HEAD <file> ## 撤销指定提交的文件。(经常使用, add/commit后均可以使用,commit后须要指定 版本号)
$ git reset --hard <commit 版本号>  ## 将本地git仓库中的文件还原到指定的commit提交的位置,commit 版本号 没必要复制完整 7~10位便可。能够撤回某一个提交节点也能够恢复至当前。reset后本地的commit日志也会被回滚到还原的位置。  --hard表示坚定的意思。
HEAD is now at 71befda 提交数据  ## 提示信息为当前已经到了 某个commit提交的位置,再看文件也是那一次提交的数据信息。
$ git reset --hard HEAD^  ## 根据头信息往上一步回滚。回到上一次记录


$ git reflog  ##  能够打印出全部的日志,包括移动的,删除的,能够采用这个来回到reset以后不能回到的节点。这个记录也仅仅只是被操做后的记录信息。第一个记录的是 版本 号,依然可使用 git reset --hard <版本号> 回滚到以前的某一步操做
71befda HEAD@{0}: reset: moving to 71befdabfa048d 
72f5d07 HEAD@{1}: reset: moving to 72f5d07ce7cda17dd
71befda HEAD@{2}: reset: moving to 71befdabfa048d
72f5d07 HEAD@{3}: commit: 第三次
058df75 HEAD@{4}: commit: 测试diff
71befda ## 第一个为 版本号
HEAD@{5}: commit (initial): 提交数据 ## HEAD表示头信息 操做顺序(最后操做的排在最前面)和操做命令以及相关信息。



$ git log <|commit 版本号>  ## 越后提交,排在最前面,若是传入commit 版本号 则会查找出指定的commit 版本号 的内容。
commit 71befdabfa048ddd21e4e16631a8271a13ed7fd0  ## 提交的commit 版本号,能够用在后面的恢复等操做
Author: xxx <xxxxx@xxx.com> ## 提交的做者,这里读取的是全局配置的config文件中的信息
Date:   Sat Jun 29 14:29:36 2019 +0800  ## 提交的时间

    提交数据   ## commit 时输入的信息 -m 后面输入的信息。
##  注意:当log数据过多的时候会出现:(提示输入命令),在键盘上按上下键表示翻页。按q键表示退出。
$ git log --graph  ## 显示合并的图谱

$ git diff <|文件>  ## 添加 文件  则会对比指定文件,不添加则会递归对比。若是没有修改则不会对比。默认对比的是工做区中的文件和暂存区的文件。
$ git diff <分支名> <|文件名>  ## 和上面的规则同样,此次比较的是本地的Git 仓库上的文件
$ git diff origin/<分支名> <|文件名>  ## 和上面的规则同样,此次比较的是远程Git 仓库上的文件,origin表示 源头,也就是服务器端的数据
$ git diff --cached <|文件>  ## 和上面的规则同样,此次比较的是拿暂存去和本地Git 仓库去比较


$ git branch  ## 查看分支,默认只显示本地的分支,第一次建立只有当你commit以后才会显示分支信息
  feature/a-dev-branch
  master 
* test ## * 表示当前的分支
$ git branch -a ## 查看全部的分支,包括远端分支,远端分支的名称是红色字体显示,本地分支是白色字体显示。
$ git branch <分支名称> ## 建立一个分支,从master分支上复制一份到新建的分支上去,若是存在对应分支则会给出对应的提示。从commit的那一步操做开始分支和master才没有任何关系了(切换后commit的信息再也不另外一个分支上有了,当两个分支没有关系的时候修改后直接切换会提醒你先commi在切换,不然修改的文件会有被覆盖的危险)。
$ git branch -D(-d) <分支名称>  ## 删除指定的分支,不能在当前分支上删除当前分支,须要切换到其余分支再去删除。
Deleted branch dev2 (was 72f5d07).


$ git checkout <分支名称>  ## 切换到对应的分支上。若是本地有新文件,新文件依然存在,若是有未提交的文件,则会提醒你有修改的文件,修改后的文件依然被带到切换后的分支中去。
M       1.txt
Switched to branch 'dev2'
$ git checkout -b iss53  ##  先建立分支,并同时切换至该分支
Switched to a new branch 'iss53'

##  切换并指定远程分支(远程分支必须存在)
$ git checkout -b iss53 origin/分支名   
Switched to a new branch 'iss53'

### 这至关于执行下面这两条命令:
$ git branch iss53
$ git checkout iss53


$ git stash  ## 表示把我当前写完的代码给暂存取来,经常使用在切换分支以前不想add/commit,可使用该命令暂时存储起来(暂存后,文件会回滚到上一次,方便去作切换分支等操做)。
$ git stash -h  ## 查看stash 全部可供选择的参数
usage: git stash list [<options>]  ## 显示当前暂存的列表,暂存后才会有list信息
   or: git stash show [<stash>] ## 显示当前暂存文件和目前文件的差别
   or: git stash drop [-q|--quiet] [<stash>] ## 删除list中的全部信息,也就是删除暂存后的文件信息
   or: git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>] ## 将暂存文件还原,应用回来。会删除掉list列表中的记录
   or: git stash branch <branchname> [<stash>] 
   or: git stash [save [--patch] [-k|--[no-]keep-index] [-q|--quiet]
                       [-u|--include-untracked] [-a|--all] [<message>]]
   or: git stash clear


$ git merge <分支名>  ## 将指定的分支文件合并到当前分支上。
##  当合并冲突时,会提示你如何阶级
$ git merge master
Auto-merging 1.js
CONFLICT (content): Merge conflict in 1.js ## 1.js中的合并冲突
Automatic merge failed; fix conflicts and then commit the result. ## 提示你去修复冲突的内容,修复完毕后去commit你修复后的文件(须要先 add 进缓冲区)。

#### 冲突后的文件
<<<<<<< HEAD   ## 这里表示你修改的部分(当前的分支)
        var name = '测试帐号';
======= ## 这里表示合并过来的master分支上的内容。====是分隔符。删除掉其中一个便可,或者两个都保留去掉<<<< >>>> 这些提示信息
        var name = 'laoxu';
>>>>>>> master

#### 修改事后以下
var name = 'laoxu';


$ git remote -h  ##  对远程分支的配置及操做
usage: git remote [-v | --verbose] ## 查看配置的远程,fetch表示可拉取的,push表示可推送的。
   or: git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] [--mirror=<fetch|push>] <name> <url> ##  添加远程分支 须要起别名而后对应远程的url地址
   or: git remote rename <old> <new> ## 修改 remote 配置中的某一项别名
   or: git remote remove|rm <name> ## 删除对应别名的远程分支(rm 是 remove的简写)
   or: git remote set-head <name> (-a | --auto | -d | --delete | <branch>)
   or: git remote [-v | --verbose] show [-n] <name>
   or: git remote prune [-n | --dry-run] <name>
   or: git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]
   or: git remote set-branches [--add] <name> <branch>...
   or: git remote get-url [--push] [--all] <name>
   or: git remote set-url [--push] <name> <newurl> [<oldurl>]
   or: git remote set-url --add <name> <newurl>
   or: git remote set-url --delete <name> <url>

    -v, --verbose         be verbose; must be placed before a subcommand
    
    
$ git push origin <分支>  ## origin 是上一步remote远程配置的别名对应远程url。表示推向远程某url上的某一个分支上面去。
## 若是你在push提交的时候,远程仓库提交的commit次数(指针)始终比你本地的多,那么就回提醒你提交失败,并让你先作pull的操做。


$ git clone <url项目地址> <|项目别名>  ## 把远程代码克隆都本地,默认状况下项目的名字就是远程分支上的名称。

$ git fetch -h  ## 取的git远程仓库中的分支
usage: git fetch [<options>] [<repository> [<refspec>...]]
   or: git fetch [<options>] <group>
   or: git fetch --multiple [<options>] [(<repository> | <group>)...]
   or: git fetch --all [<options>]
相关文章
相关标签/搜索