git 常用命令

配置全局用户名和邮箱地址。

git config --global user.name 'runoob'

git config --global user.email test@runoob.com

git config --list 命令来列出所有 Git 当时能找到的配置

git init 创建仓库

git init 

git init --bare test1.git 指定目录

git add 将该文件添加到缓存

git add <path>

l  添加documentation目录及其子目录下所有*.txt文件的内容

git add documentation/*.txt

l  将所有 git-*.sh 脚本内容添加

git add git-*.sh

l  将所有修改添加到暂存区

git add . 

l  Ant风格添加修改

git add *

l  将以Controller结尾的文件的所有修改添加到暂存区

git add *Controller  

l  将所有以Hello开头的文件的修改添加到暂存区

git add Hello*   例如:HelloWorld.txt,Hello.java,HelloGit.txt ...

l  将以Hello开头后面只有一位的文件的修改提交到暂存区

git add Hello?   例如:Hello1.txt,HelloA.java 如果是HelloGit.txt或者Hello.java是不会被添加的

<path>中所有跟踪文件中被修改过或已删除文件的信息添加到索引库

git add -u [<path>]

把中所有跟踪文件中被修改过或已删除文件和所有未跟踪的文件信息添加到索引库。

git add –A

git status 命令用于查看项目的当前状态。

git status -s 紧凑的格式输出

git commit将缓存区内容添加到仓库中。

使用 -m 选项以在命令行中提供提交注释。

git commit -m '第一次版本提交'

如果你觉得 git add 提交缓存的流程太过繁琐,Git 也允许你用 -a 选项跳过这一步,只对跟踪的文件起作用。

git commit -am '修改 hello.php 文件'

git commit newfile.txt -m "commit a new file: newfile.txt"

git commit -a -c ORIG_HEAD

-c <commit> 或者 -C <commit>意思是拿已经提交的对象中的信息(作者,提交者,注释,时间戳等)提交

git mv移动文件和重命名 

git mv <sourcefile> <destfile> 

git reset回滚 

l  清空所有缓存

git reset HEAD

l  从缓存移除filename

git reset filename

l  回滚为HEAD分支

git reset --hard

l  回滚为ORIG_HEAD分支

git reset --hard ORIG_HEAD

l  合并ORIG_HEAD分支

git reset --merge ORIG_HEAD

l  回滚最近一次提交

git reset --soft HEAD^等同于git reset --hard HEAD~1

l  永久删除最后3个提交

git reset --hard HEAD~3 

l  重置单独的一个文件

git reset -- frotz.c

l  用reset --keep把在start之后的提交清除掉,但是保持工作区不变。

git reset --keep start

 

git checkout签出 

l  签出文件,filename可以是通配符,文件名不与分支冲突可以没有—

git checkout -- <filename> 

l  签出master分支

git checkout master

l  签出tag分支

git checkout tagid

l  签出log分支

git checkout logid

l  尝试三路合并

git checkout -m mytopic 

l  从某个日志,tag签出文件

git checkout [logid|tagid] filename

l  从远程dev/1.5.4分支取得到本地分支/dev/1.5.4(新分支)

git checkout -b dev/1.5.4 origin/dev/1.5.4

 

git stash更改储藏在脏工作目录中

git stash 相当于  git stash save

隐藏前先加入缓存

l  要查看现有的储藏

git stash list

l  检查暂存文件

git stash show

l  移除储藏

git stash drop stash@{2}

l  应用更早的储藏

git stash apply stash@{2}

l  应用最近储藏并移出栈

git stash pop

l  从储藏中创建分支

git stash branch testchanges

l  配置一个新命令

取消之前所应用储藏的修改

stash unapply

git config --global alias.stash-unapply '!git stash show -p | git apply -R'

git rm删除文件 

git rm <filename> 

git rm --cached <filename>  只删除暂存区文件

git fetch从另一个存储库下载对象和引用。

l  更新远程跟踪分支

git fetch origin

l  明确使用refspec

git fetch origin +pu:pu maint:tmp

pu分支将被更新,因为它的前缀是加号; tmp不会。

l  查看远程缓存到本地的远程日志

git log FETCH_HEAD

l  要更新所有分支

git fetch

l  取回特定分支的更新

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

l  查看远程分支

git branch -r

l  查看所有分支

git branch -a

l  取回远程主机的更新以后,可以在它的基础上,使用git checkout命令创建一个新的分支。

git checkout -b newBrach origin/master

git merge合并分支

l  将分支maint合并到当前分支中,但不要自动进行新的提交

git merge --no-commit maint

l  将分支dev合并到当前分支中,自动进行新的提交:

git merge dev

git pull提取远程仓库

从远程获取最新版本并merge到本地

git pull是git fetch后跟git merge FETCH_HEAD的缩写。

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

l  要取回origin主机的next分支,与本地的master分支合并

git pull origin next:master

l  远程分支(next)要与当前分支合并,则冒号后面的部分可以省略。

git pull origin next

等同于

git fetch origin

git merge origin/next

l  手动建立追踪关系

git branch --set-upstream master origin/next

l  如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。

git pull origin

l  如果当前分支只有一个追踪分支,连远程主机名都可以省略。

git pull

l  采用rebase模式

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

l  git fetch和git pull的区别

git fetch:相当于是从远程获取最新版本到本地,不会自动合并。

 

git push推送到远程仓库

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

l  将本地的master分支推送到origin主机的master分支。如果master不存在,则会被新建。

git push origin master

l  删除指定的远程分支

git push origin :master

git push origin --delete master

l  如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。

git push origin

l  -u选项指定一个默认主机

git push -u origin master

l  如果当前分支只有一个追踪分支或指定origin为默认主机,那么主机名都可以省略。

git push

l  推送所有本地分支到服务器

git push --all origin

l  强制推送,覆盖远程分支

git push --force origin

l  推送tag

git push origin –tags

git push origin tag_name

l  推送到同名分支

git push origin HEAD

l  将当前分支推送到服务器

git push origin HEAD:master

l  删除远程标签

git push origin :tag_name

 

git diff查看执行 git status 的结果的详细信息

git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别。

l  比较当前文件和暂存区文件差异

git diff <file>

l  在两个分支之间比较

git diff <branch1> <branch2>

l  查看当前目录和另外一个分支(test)的差别

git diff test

l  比较两次提交之间的差异

git diff <id1><id1><id2>

l  尚未缓存的改动:

git diff

l  查看已缓存的改动:

 git diff –cached或git diff --staged

l  查看已缓存的与未缓存的所有改动:

git diff HEAD

l  显示摘要而非整个 diff:

git diff –stat

l  输出自topic和master分别开发以来,master分支上的变更。

git diff topic...master

l  比较上次提交和上上次提交

git diff HEAD^ HEAD

 

 

git difftool 图形化的方式或其它格式输出

git difftool --tool-help   看你的系统支持哪些 Git Diff 插件

git clone

git clone username@ip:path

username 服务器端用户名

ip服务器地址

path库目录

例如:git clone git@10.6.0.241:/home/gitrepo/test1.git

验证是否连接成功 ssh –T git@github.com

添加远程库

git remote add [shortname] [url]

使用以下命令生成SSH Key:

ssh-keygen -t rsa -C "youremail@example.com"

查看当前的远程库

git remote

git remote -v

执行时加上 -v 参数,你还可以看到每个别名的实际链接地址。

 

删除远程仓库

git remote rm [别名]

git branch分支管理

创建分支命令 

git branch (branchname)
使用 git checkout -b (branchname) 命令来创建新分支并立即切换到该分支下

切换分支命令:

git checkout (branchname)
当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。

合并分支命令:

git merge

列出分支基本命令:

git branch

没有参数时,git branch 会列出你在本地的分支。

显示本地和远程分支

git branch -a

删除分支

git branch -d (branchname)

强制删除分支

git branch -D (branchname)

修改分支的名字

git branch -m branchname new branchname

删除远程分支

git push origin --delete dev2

列出远程跟踪分支

git branch -r

 

git tag标签

列显已有的标签

git tag    

创建标签

git tag -a v1.4 -m 'my version 1.4'

-a (译注:取 annotated 的首字母)指定标签名字

-s用 GPG 来签署标签

-m 选项则指定了对应的标签说明

git show 命令查看相应标签的版本信息,并连同显示打标签时的提交对象。

删除标签

git tag -d v1.0

追加注标签

git tag -a v1.2 9fceb02

推送标签到服务器

git push origin [tagname]

推送所有标签到服务器

git push origin --tags

git log 查看提交历史

git log

l  查看历史记录的简洁的版本。

git log --oneline

l  查看历史中什么时候出现了分支、合并。

git log --oneline --graph

l  逆向显示所有日志。

git log --reverse --oneline

l  查找指定用户的提交日志

git log --author=Linus --oneline -5

l  指定日期,可以执行几个选项:--since 和 --before,但是你也可以用 --until 和 --after。
-no-merges 选项以隐藏合并提交
git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges

l  include/scsi或drivers/scsi子目录中的任何文件的所有提交

git log master include/scsi drivers/scsi

l  显示在任何本地分支中的所有提交,但不包括任何远程跟踪分支机构的起始点(origin不具有)。

git log --branches --not --remotes=origin

l  显示历史,包括变化差异,但仅从“主分支”的角度来看,忽略来自合并分支的提交,并显示合并引入的变化的完全差异。

git log -p -m --first-parent

l  将显示最近三次的提交。

git log -3

l  根据提交ID查询日志

git log commit_id    #查询ID(如:6bab70a08afdbf3f7faffaff9f5252a2e4e2d552)之前的记录,包含commit

git log commit1_id commit2_id #查询commit1与commit2之间的记录,包括commit1和commit2

git log commit1_id..commit2_id #同上,但是不包括commit1

HEAD代表最后一次提交,HEAD^为最后一个提交的父提交,等同于HEAD~1,HEAD~2代表倒数第二次提交

l  --pretty按指定格式显示日志信息,可选项有:oneline,short,medium,full,fuller,email,raw以及format:,默认为medium,可以通过修改配置文件来指定默认的方式。

git reflog查看可以回滚的分支

获取帮助

git help <verb>

git <verb> --help

man git-<verb>

常见场景处理

  • 合并分支,冲突处理

n  用reset --keep start把在start之后的提交清除掉,但是保持工作区不变。

n  git reset –hard HEAD@{0} 回滚到HEAD@{0}分支

n  回滚到merge之前

git checkout logid

git branch newbranch

  • 远程库被清空库,pull到本地,合并不相干的库到本地。

n  git checkout -b newbranch origin/master签出到新分支

n  git reset –hard fetch_head 回滚当前目录为远程分支

  • 误删文件如何取回。

n  git checkout logid filename

  • HEAD,ORIG_HEAD,FETCH_HEAD,MERGE_HEAD区别

n  HEAD指针代表当前工作路径(当前目录下最近的一次commit),HEAD与master指向同一id说明当前处在master分支。

n  FETCH_HEAD从远端或分支fetch过来的标志

n  ORIG_HEAD做合并时合并后的分支

n  MERGE_HEAD合并时合并前的分支

n   针对某些危险操作,Git通过记录HEAD指针的上次所在的位置ORIG_HEAD提供了回退的功能。当你发现某些操作失误了,比如错误的reset到了一个很早很早的版本,可以使用git reset --hard ORIG_HEAD回退到上一次reset之前。

更多内容查看https://www.yiibai.com/git/






 

原文地址:https://www.cnblogs.com/frankliu/p/8510538.html