天天看点

GIT 实用命令大全

(--全拼参数  -缩写参数)

clear 在git bash中清屏

git 命令如config --help 查看该命令帮助文档

git --version 查看git版本号

git log 回顾下所有人的提交历史

git log --oneline --decorate --graph --all 输出你的提交历史、各个分支的指向以及项目的分支分叉情况

git reflog 查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作), 可用于恢复

git config --list 显示当前的Git配置,键入"q"退出

git config --global user.name "John Doe"                              git配置用户名

git config --global user.email "[email protected]"                  git配置邮件地址

git clone [email protected]:公司名/项目名.git                          克隆远端所有分支代码仓库,本地创建默认master分支

git clone -b 分支名 [email protected]:公司名/项目名.git                 克隆远端所有分支代码仓库,本地仅创建指明分支

git clone -b 分支名 --single-branch [email protected]:公司名/项目名.git 仅克隆远端当前分支仓库代码

------------------------------------------------------------------------------------variables

打标签

git commit -m "Update version number to 2.7.8.0.2 and last updated time. Add tag 2.7.8.0.2"

git tag -a <tag名> <commit对应的hash码> -m "Release version 1.01"

注解:git tag 是打标签的命令,-a 是添加标签,其后要跟新标签号,-m 及后面的字符串是对该标签的注释。

例子,如下:

git tag -a 2.7.8.0.2 69e80e369c698bab74d4301755227f62d6f50f4a -m "2.7.8.0.2"

提交标签到远程仓库

git push origin --tags

注解:就像git push origin master 把本地修改提交到远程仓库一样,-tags可以把本地的打的标签全部提交到远程仓库。

http://blog.csdn.net/jeffasd/article/details/49863335

http://blog.csdn.net/wangjia55/article/details/8793577/

查看所有标签

git ls-remote --tags 显示当前分支下,所有标签名和commit_id列表

删除某个tag 

git tag -d 2.7.8.0.2 删除这个tag(本地) 

git push origin :refs/tags/2.7.8.0.2 删除这个tag(服务器),这时可以发现Bitbucket网上的那个tag不见了

git checkout <tag名> 使用tag处的commit还原当前git, 如 git checkout '2.4.2.0'

------------------------------------------------------------------------------------

工作区 [Untracked]

git add <file> 跟踪新文件(由untracked->tracked)

------------------------------------------------------------------------------------

工作区 [Modified]

本地修改文件后,在phpstorm中当前文件下,使用右键-> git -> Compare with the Same Repository Version,将当前工作区文件和本地版本仓库比较

git status          查看所有文件状态

git status -uno     查看文件状态,不显示Untracked

git checkout -- <file>... 从本地暂存区检出覆盖工作区(用于在git add之前,撤销当前修改)

git checkout .            从本地暂存区检出覆盖工作区(用于在git add之前,撤销所有修改)

------------------------------------------------------------------------------------

工作区-->暂存区 [Staged]

git add .或<file>...      添加到staged暂存区 (选中cmd窗口中的文件名,按一下鼠标中间自动粘贴), 

                          或跟踪新文件(由untracked->tracked), 合并时把有冲突的文件标记为已解决状态

git reset HEAD <file>...  从本地版本库检出覆盖暂存区(移出暂存区当前文件,status变为Modified)

git reset .               从本地版本库检出覆盖暂存区(移除暂存区所有文件,status变为Modified)

git rm <file>...          (针对UnModified)移除版本库,删除文件,并暂存待提交

git rm --cached <file>... (针对UnModified)移除版本库和暂存区,不删除文件,status->Untracked files, 且不会被提交,如果push之前重新add还是会提交,常用于新建的文件,且不想跟踪此文件了

------------------------------------------------------------------------------------

暂存区-->资源库(版本库)

git commit -m "message"  

git reset --soft HEAD^          撤销上一次的提交(status变为commit前add后)

git reset HEAD^                 撤销上一次的提交(status变成add之前状态)

git reset --hard HEAD^          撤销上一次的提交,撤销当前所有修改(status变为UnModified)

git reset --hard 版本号          本地回退到任意历史版本,可配合git reflog使用(用于任何状态)

git reset --hard origin/master  放弃本地修改, 使用远程版本库强制更新(用于任何状态)

git reset --hard                本地回退到最新版本库(用于任何状态)

------------------------------------------------------------------------------------

-->提交本地版本库 到远程仓库

git pull origin dev             取回远程仓库的变化,并与本地分支即版本库合并(=git fetch + git merge)

git pull origin dev --rebase    

git push origin dev             传本地当前分支到远程仓库dev分支

git fetch origin master          从远程的origin仓库的master分支下载代码

git diff origin/master master    查看本地分支和远程分支的差异

                                 "---"表示变动前的文件,"+++"表示变动后的文件。

                                 变动的位置用@@作为起首和结束。

                                 @@ -1,5 +1,4 @@ 表示-第一个文件的1,第一行开始,5连续五行 +第二个文件1,第一行开始,4连续四行

                                 + 代码... 表示增加的代码,-表示减少的代码

git reset --merge               回退merge操作

git reset --hard commit_id     本地回退到任意版本(可用 git log –-oneline 查看)

git push origin HEAD --force   #远程提交回退

git revert <commit_id>         本地和远程同时回退到任意版本

git reset --soft|--mixed|--hard <commit_id> 

                    --mixed    会保留源码,只是将git commit和index 信息回退到了某个版本.

                    --soft     保留源码,只回退到commit信息到某个版本.不涉及index的回退,如果还需要提交,直接commit即可.

                    --hard     源码也会回退到某个版本,commit和index 都会回退到某个版本.

------------------------------------------------------------------------------------

<处理冲突文件>

(三种状态:绿色的文件没有冲突可以commit,红色的文件unmerged paths表示冲突需手动合并,not staged for commit表示修改过的还没有add但不冲突)

git stash               丢弃当前修改,并将修改保存起来,没有暂存注释

git pull origin master  拉取远程master分支

git stash list          查看暂存的信息

git stash pop [email protected]{0} 恢复暂存信息,并丢弃暂存文件

冲突提示:

Auto-merging c/environ.c

CONFLICT (content): Merge conflict in c/environ.c

打开相关文件处理冲突并修改完后,没有问题时,可以正常提交。

git stash save "work in progress." 丢弃当前修改,并将修改保存起来,添加暂存注释

git stash apply [email protected]{0}          应用暂存起来的某次修改

git stash drop  [email protected]{0}          移除保存过的stash

git stash clear                    清除所有暂存文件

git stash -p 交互式命令,我们可以一个文件一个文件的遍历,决定每个文件的操作方式

[y,n,q,a,d,/,?]含义:

   y - stage this hunk

   n - do not stage this hunk

   q - quit; do not stage this hunk nor any of the remaining ones

   a - stage this hunk and all later hunks in the file

   d - do not stage this hunk nor any of the later hunks in the file

   g - select a hunk to go to

   / - search for a hunk matching the given regex

   j - leave this hunk undecided, see next undecided hunk

   J - leave this hunk undecided, see next hunk

   k - leave this hunk undecided, see previous undecided hunk

   K - leave this hunk undecided, see previous hunk

   s - split the current hunk into smaller hunks

   e - manually edit the current hunk

   ? - print help

------------------------------------------------------------------------------------

<分支操作>

git branch -a          查看分支,找到将要切换到的分支

git branch branchName  创建分支

git branch             不带参数:列出本地分支,当前分支前加“*”号

git branch -vv         查看目前分支的“关联”情况,即本地分支的远程跟踪情况

git checkout -b branchName     创建并切换分支(-B 强制切换,没有创建,有的话会覆盖)

git checkout -b serverfix origin/serverfix         基于远程origin/serverfix分支,创建本地跟踪serverfix分支

git checkout --track origin/serverfix              创建一个serverfix分支,并将其配置为远程origin/serverfix的跟踪分支(好用)

git branch --set-upstream-to=origin/master master  配置本地分支master,跟踪远程分支origin/master,也可以直接拉取git pull origin master.

git branch -d <branch,如dev, hotfix>               删除本地分支(使用-D参数,强制删除分支)

git remote set-head origin -d  删除游离分支 (查看分支后,发现remotes/origin/HEAD -> origin/master, 即HEAD处于游离状态)

git checkout master              切换到master分支

git checkout master, git merge hotfix   切换到master分支,后将hotfix合并到当前分支master上

git merge dev                    将本地dev分支合并到当前分支

git merge origin master          合并远程分支最新代码到当前分支

git push origin dev              推送本地指定分支代码到远程仓库

git push origin --delete bugfix  从服务器上删除 bugfix 分支

git cherry-pick commit_id        将任意分支的一次(或多次)commit_id,提交到当前分支下

git cherry-pick --abort          当前分支恢复到cherry-pick之前的状态

git ls-remote <remote,如igiorn>    来显式地获得远程引用的完整列表, 列出所有的分支/标签tags

git remote show <remote,如origin>  获得远程分支的更多信息

git fsck --lost-found              通过.git/lost-found/other这个路径,你可以恢复任何你git add过的文件

以master分支的某个commit点为基础,创建新分支dev

git branch dev 创建空dev分支

git pull origin master 拉取分支上的最新代码

git reset --hard <commit-id>|<tag> 还原到基点

git checkout dev 切换到新分支

git push origin dev 提交代码到远程分支

------------------------------------------------------------------------------------

<内容比较操作>

git diff 不加参数即默认比较工作区与暂存区的差别

git diff --cached [<path>...] 比较的是暂存区和最新本地版本库的差别

git diff HEAD [<path>...]  比较工作区与最新本地版本库,如果HEAD指向的是master分支,那么HEAD还可以换成master

------------------------------------------------------------------------------------

<Merging 冲突解决 git pull之后>

git merge --abort 退出merging,丢弃合并

一、出现merging冲突的原因:git远程上存在一个本地不存在的git 分支,就是本地远程代码不同步

二、解决方式:

方法一:

git pull 出现冲突后可以暂存本地修改git stash ,然后git pull 更新代码,

git stash list 可查看暂存记录列表,释放本地暂存 git stash apply [email protected]{0} ,出现冲突文件,找到并解决,

然后可以提交git add . 加入索引库,然后本地提交git commit -m '注释' 最后git push到远程。

方法二:

1.git pull  更新代码,发现

error: Your local changes to the following files would be overwritten by merge:pom.xml

Please commit your changes or stash them before you merge.

这说明你的pom.xml与远程有冲突,你需要先提交本地的修改然后更新。

2.git add pom.xml

git commit -m '冲突解决',提交本地的pom.xml文件,不进行推送远程

3.git pull   更新代码

Auto-merging pom.xml

CONFLICT (content): Merge conflict in pom.xml

Automatic merge failed; fix conflicts and then commit the result.

更新后你的本地分支上会出现 (develop|MERGING)类似这种标志

4.找到你本地的pom.xml文件,并打开

你会在文件中发现<<<<<<< HEAD ,=======  ,>>>>>>> ae9a0f6b7e42fda2ce9b14a21a7a03cfc5344d61

这种标记,<<<<<<< HEAD和=======中间的是你自己的代码,  =======  和>>>>>>>中间的是其他人修改的代码

自己确定保留那一部分代码,最后删除<<<<<<< HEAD ,=======  ,>>>>>>>这种标志

5.git add pom.xml    git commit -m '冲突解决结束'   再次将本地的pom.xml文件提交

6.git push   将解决冲突后的文件推送到远程

machine type, 0:default,empty/unknown, 1: washer, 2: dryer, 3: front load washer, 4: top load washer, 5: stack washer/dryer 6: stack dryer/dryer

machine type, 0:default,empty/unknown, 1: washer, 2: dryer, 3: front load washer, 4: top load washer, 5: stack washer/dryer 6: stack dryer/dryer

参考手册: https://git-scm.com/book/zh/v2

https://techtrex.sharepoint.com/:u:/g/Deployment/EY1vFEvQKZlLvNYUj9Ws6tIB3D-WFp22sAoqp9YmwVkOLw?e=L2au1u 

参考手册: https://git-scm.com/book/zh/v2

继续阅读