Git学习5:Git常用命令简明用法

来源:互联网 发布:java抛出异常 编辑:程序博客网 时间:2024/06/08 07:23

不要使用git commit -a

该命令可以对本地所有的变更文件(包括对本地修改和删除的文件)执行提交操作,但是不包括未被版本库跟踪的文件。

git命令补充说明

显示.git目录所在的位置

git rev-parse --git-dir

显示工作区的位置

git rev-parse --show-toplevel

对全局配置文件进行编辑

git config -e --global

删除全局配置文件对user.name的配置

git config --unset --global user.name

查看全局配置文件user.name的配置

git config --global user.name

空白提交(如果工作区的文件没有发生修改,那么默认是不允许被提交的)

git commit --allow-empty -m "empty commit message"

修改最新的提交的信息

git commit --amend --allow-empty --reset-author        --amend:对刚刚的提交进行修改,而不会产生新的提交        --allow-empty:使得空白提交被允许,这里使用该参数的原因是刚刚的提交是一个空白提交        --reset-author:是将提交者的ID同步修改,否则只会影响commit的ID

为命令设置别名

git config --global alias.ci commit

查看引用对应的提交ID

git rev-parse master

查看本地的最新提交和历史提交

git rev-list HEAD

显示远程版本库的引用(这里是origin)对应的SHA1哈希值

git ls-remote origin

禁止非快进式提交

git --git-dir=/home/rhwayfun/java/notes/repos/shared.git config receive.denyNonFastForwards true

输出简明的状态信息

git status -s

追踪README文件的来源

git blame README

将welcome.txt文件改名为README

git mv welcome.txt README

查看工作区的文件大小

find . -path ./.git -prune -o -type f -printf "%-20p\t%s\n"

查看日志的详细输出

git log -1 --pretty=raw

查看远程版本库的分支

git ls-remote /home/rhwayfun/java/notes/repos/git-demo-init.git

git diff命令

    对工作区与暂存区的文件进行比较    git diff    对工作区与版本库的HEAD指向的commit进行比较    git diff HEAD    对暂存区和版本库中的文件进行对比    git diff --cached(or --staged)    比较工作区和里程碑A    git diff A    比较里程碑A和里程碑B    git diff A B    逐词比较    git diff --word-diff

git ls-*命令

    浏览版本库的目录树    git ls-tree -l HEAD    查看历史版本的文件列表    git ls-files --with-tree=HEAD^    显示暂存区的目录树    git ls-files -s

该命令输出的第三个字段并不代表文件的大小,而是暂存区的编号。如果需要暂存区的目录树显示文件大小,需要首先将暂存区的目录树写入对象库(使用git write-tree),然后使用命令git ls-tree -l TREE_ID

    递归显示目录树    git write-tree | xargs git ls-tree -l -r -t        -l:可以显示最终文件的大小        -r:递归显示目录内容        -t:把递归过程中遇到的每棵树都显示出来

git cat-file命令

    查看SHA1对应的数据类型    git cat-file -t b49b13    查看SHA1对应的内容    git cat-file -p b49b13    查看A里程碑对应的目录树    git cat-file -p A^{tree}    从目录树创建提交并放弃之前的提交    echo "Commit from tree of tag A." | git commit-tree A^{tree}    查看里程碑指向的提交    git cat-file commit A^0    查看历史版本尚在的删除文件信息    git cat-file -p HEAD^:welcome.txt    从历史版本中提取文件并恢复到本地    git cat-file -p HEAD~1:welcome.txt > welcome.txt(HEAD~1相当于HEAD^)    or    git show HEAD~1:welcome.txt > welcome.txt    or    git checkout HEAD~1 -- welcome.txt

git reset命令

    git reset:仅用HEAD指向的目录树重置暂存区,工作区不会收到影响。相当于将之前使用git add命令更新到暂存区的内容撤出暂存区。引用也咩有发生改变,因为引用重置到HEAD相当于没有重置    git reset HEAD:同上    git reset -- filename:仅将文件filename的改动撤出暂存区,暂存区中的其他文件不改变。相当于对命令git add filename的反向操作    git reset HEAD filename:同上    git reset --soft HEAD^:工作区和暂存区不改变,但是引用向前回退一次。当对最新提交的提交说明或者提交的更改不满意的时候,撤销最新的提交以便重新提交。    补充:git commit --amend相当于执行了 git reset --soft HEAD^和git commit -e -F .git/COMMIT_EDITMSG两条命令(COMMIT_EDITMSG保存了上次的提交日志)    git reset HEAD^:工作区不改变,但是暂存区会回退到上一次提交之前,引用也会回退一次。    git reset --mixed HEAD^:同上    git reset --hard HEAD^:彻底撤销最近的提交。引用会回退一次,而且工作区和暂存区都会回退到上一次提交之前。    git reset --hard HEAD^:将master分支重置到上一个提交

git checkout命令

    git checkout branch:检出branch分支。更新HEAD的指向为branch分支,以及用branch指向的树更新暂存区和工作区    git checkout:汇总显示工作区、暂存区与HEAD的差异    git checkout HEAD:同上    git checkout -- filename:用暂存区的filename文件悄无声息地覆盖工作区的filename文件    git checkout branch -- filename:维持HEAD的指向不变,用branch所指向的提交中的filename文件替换暂存区和工作区的相应文件(直接覆盖)    git checkout -- . 或者写作git checkout .:这条命令会取消所有本地修改,相当于用暂存区的所有文件直接覆盖工作区的所有文件,不给任何提示的机会    git checkout .:用暂存区的内容刷新工作区    git checkout -- welcome.txt:撤销工作区中未提交的修改(welcome.txt文件为工作区中未提交的文件)

git rebase命令

    格式:git rebase --onto <newbase> <since> <till>    以上命令会执行以下操作:    1) 首先执行git checkout <till>,将HEAD指向<till>,这个过程会用<till>(如果<till>是分支的话)指向的树更新暂存区和工作区。另外,如果<till>指向的不是一个分支(比如master),那么变基操作是在分离头指针状态进行的(detached HEAD),当变基操作结束后,需要对master分支执行重置使得变基操作的结果生效    2) 将<since>..<till>所标志的提交范围写到一个临时文件中。这里非提交范围不包括<since>但是包括<till>的历史提交    3) 将当前分支强制重置到<newbase>,相当于执行命令git reset --hard <newbase>    4) 从保存在临时文件中的提交列表中,将提交逐一按顺序重新提交到重置之后的分支上    5) 如果遇到提交已经在分支中,则跳过该提交    6) 如果在提交过程中遇到冲突,则变基过程暂停。待用户解决冲突后,执行git rebase --continue继续变基操作。或者执行git rebase --skip跳过此提交。或者执行git rebase --abort就此终止变基操作切换到变基前的分支上。

git stash命令

    1.查看保存的进度    git stash list    2.从最近保存的进度恢复    git stash pop    3.恢复指定的进度    git stash apply stash@{1}    4.保存当前的进度    git stash save "hack-1: hacked welcome.txt, newfile hack-1.txt"    or    git stash    5.删除进度列表    git stash clear

git clean命令

    清除当前工作区中没有加入版本库的文件和目录    git clean -fd    测试哪些文件和目录会被删除    git clean -nd

git add命令

    将本地所有的修改(包括删除)等操作(必须是已被跟踪的文件)都提交都暂存区    git add -u    将工作区中所有的改动以及新增的文件添加到暂存区(也就是不被跟踪的文件也会被设置为跟踪,然后将文件添加到暂存区)    git add -A

git archive命令

    将最新的提交建档    git archive -o latest.zip HEAD    只将指定目录建立归档    git archive -o partial.tar HEAD src    基于里程碑v1.0建档    git archive --format=tar --prefix=1.0/ v1.0 | gzip > foo-1.0.tar.gz

git clone命令

    用法1:git clone <repository> <directory>    用法2:git clone --bare <repository> <directory.git>    用法3:git clone --mirror <repository> <directory.git>    用法1:将<repository>指向的版本库创建一个克隆到<directory>目录。目录<directory>相当于工作区,文件都会检出    用法2和用法3:创建的版本库都不包含工作区,直接就是版本库的内容,这样的版本库称为裸版本库    用法3与用法2的区别在于,用法3创建的版本库的克隆对上游版本库进行了注册,这样就可以在裸版本库中使用git fetch和上游的版本库进行同步
1 0
原创粉丝点击