git常用命令

下面是几个专用名词:

  • workspace: 工作区
  • Index/Stage: 暂存区
  • Repository: 仓库区(本地仓库)
  • remote: 远程仓库
  • file: 文件
  • dir: 文件夹,目录

新建代码库

  1. git init
  2. git init [project-name]
    • 新建一个目录,初始化为git代码库
  3. git clone [url]
    • 克隆整个项目

配置

git的设置文件为 .gitconfig , 他可以在主目录下,也可以在项目目录下;

  1. git config --list

    • 显示配置列表
  2. git config --global user.name "[name]"

    git config --global user.email "[email address]"

    • 设置提交代码时的用户信息
  3. 让git记住用户名和密码:
    在本地项目文件夹中找到 .git 文件夹,打开里面的 config 文件
    添加:

     ```
          [credential]
                helper = store
     ```
    

    再输入一次用户名密码后就可以保存住了;

增加/删除文件

  1. git add [file1] [file2]
    • 添加指定文件到暂存区
  2. git add [dir]
    • 添加指定目录到暂存区
  3. git add .
    • 添加当前目录的所有文件到暂存区;
  4. git rm [file1] [file2]
    • 删除工作区文件,并将这次删除放入暂存区
  5. git rm --cached [file]
    • 停止追踪文件,但是文件会保存在工作区

代码提交

  1. git commit -m [messsage]
    • 提交暂存区到仓库区
  2. git commit [file1] [file2] -m [message]
    • 提交暂存区的指定文件到仓库区
  3. git commit -a
    • 提交工作区自上次commit之后的变化,直接到仓库区
  4. git commit -v
    • 提交时显示所有的diff信息

git remote

为了便于管理,git要求每个远程主机都必须指定一个主机名,git remote 命令就是用于管理主机名.在克隆版本库的时候,所使用的远程主机自动被命名为origin;

  1. git remote
    • 列出所有的远程主机。比如: origin
  2. git remote -v
    • 查看远程主机的网址。比如: origin git@github.com:jquery/jquery.git(fetch)
  3. git remote add <主机名>
    • 添加远程主机
  4. git remote rm <主机名>
    • 删除远程主机
  5. git remote rename <原主机名> <新主机名>
    • 修改远程主机名

分支

  1. git branch
    • 列出所有的分支
  2. git branch -a
    • 列出所有的本地分支和远程分支
  3. git branch [branch-name]
    • 新建一个分支,但是依然留在当前分支
  4. git checkout [branch-name]
    • 切换到指定分支,并更新工作区
  5. git checkout -
    • 切换到上一个分支
  6. git merge [branch]
    • 合并指定分支到当前分支
  7. git cherry-pick [commit]
    • 选择一个commit,合并进当前分支
  8. git branch -d [branch-name]
    • 删除分支

查看信息

  1. git status

    • 显示有变更的文件
  2. git log

    • 显示当前分支的版本历史
  3. git log --stat

    • 显示commit历史,以及每次commit发生变更的文件
  4. git log -follow [file]

    git whatchanged [file]

    • 显示某个文件的版本历史,包括改文件名;
  5. git log -p [file]

    • 显示指定文件相关的每一次diff
  6. git log -3

    • 显示过去的3次提交记录
  7. git diff

    • 显示暂存区和工作区的差异
  8. git diff HEAD

    • 显示工作区与当前分支最新commit之间的差异
  9. git diff [first-branch] [second-branch]

    • 显示两次提交之间的差异

远程同步

  1. git pull
    • 取回远程仓库变化,并与本地分支合并
  2. git push
    • 上传本事指定分支到远程仓库
  3. git push [remote] --force
    • 强行推送当前分支到远程仓库,即使有冲突
  4. git push [remote] --all
    • 推送所有分支到远程仓库

撤销

  1. git checkout [file]
    • 回复暂存区的指定文件到工作区
  2. git checkout [commit] [file]
    • 恢复某个commit的指定文件到暂存区和工作区(撤销某一次提交)
  3. git checkout .
    • 恢复暂存区的所有文件到工作区
  4. git reset [file]
    • 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
  5. git reset --hard
    • 重置暂存区与工作区,与上一次commit保持一致;
  6. git reset [commit]
    • 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
  7. git reset --hard [commit]
    • 重置当前分支的HARD为指定commit,同时重置暂存区和工作区,与指定commit一致
  8. git reset --keep [commit]
    • 重置当前HEAD为指定commit,但报纸暂存区和工作区不变
  9. git stash
    • 暂时将未提交的变化移除,稍后再移入
  10. git stash pop
    • 将git stash移除的变化移入.这个命令不能用在两个差别很大的分支上,否则不但会移入未提交变化,还会合并一些两分支有区别的代码,导致大量的bug,
      比如以a分支为基础,创建了b分支,在b分支上做了一些修改,此时git stash.在切换到a分支,这种情况下可以git stash pop.来把在b分支做的修改挪到a分支上;
  11. git revert [commit]
    • 撤销某一次提交,并生成一个新的commitId.简单的说就是把某一次添加的代码删除,然后以删除操作当成一次提交生成一个commitId.与git reset [commit] 的区别.比如原来有3次提交,git revert [commit],会生成第四次提交,而git reset [commit],则会变成两次提交;
      12 git revert HEAD
    • 撤销上一次提交,并生成新的commitId;

submodule

  1. git submodule update

    • 根据主目录保存的子目录的commit,把子目录的commit对应的代码拉下来;
  2. git submodule init

    • submodule初始化
  3. git submodule update --init

    • 将submodule初始化,并把子目录的commit对应的代码拉下来
  4. git submodule add 仓库地址 文件路径

    • 仓库地址指子模块远程仓库地址,路径指将子模块放置在当前项目下的路径,如果没有会直接创建出来,比如:
    git submodule add git@github.com:lifei1016206057/jqfirst.git JqueryFirst
    

    JQueryFirst是子模块在主目录下的路径,之后就是git commit -m "创建submoduel子目录",git push了;

    submodule提交的流程,应该是这个样子的:

    • 1 确保主项目在wg分支,submodule也在wg分支
    • 2 cd进入submodule所在的目录,add + commit + push
    • 3 cd进入主项目所在的目录,用git status命令,应该可以看到刚才的submodule有new commit, 然后add + commit + push 昨天发的提交流程,是没有冲突时的情形。
      如果有冲突,则流程如下:
    • 1 确保主项目在wg分支,submodule也在wg分支
    • 2 cd进入submodule所在的目录,add + commit + push
    • 3 cd进入主项目所在的目录,用git status命令,应该可以看到刚才的submodule有new commit, 然后add + commit + push
    • 4 服务器提示冲突,执行命令 git pull, 紧接着执行 git submodule update
    • 5 现在,本地所有模块的版本都与服务器版本一致(你刚刚想要提交的版本也被还原了)。 此时,进入到你刚才修改的模块,切换到你想要的版本
    • 6 执行步骤3

其他

  1. git config --global credential.helper store
    • 设置默认的用户名,密码
  2. git rebase
    • 合并commit,将多个合并为一个;
  3. git push --set-upstream origin fuhua
    • 本地有一个fuhua分支,远端没有.直接在远端创建一个fuhua分支,并把本地代码提交上去;
  4. 在vi编辑器中,ESC退出到命令状态, Ins进入编辑状态, shift + q进入编辑状态; wq退出并保存
posted on 2017-07-25 11:40  下辈子当座桥-李飞  阅读(171)  评论(0)    收藏  举报