git常用指令

来源:常用Git命令

常用 Git 命令清单 - 阮一峰的网络日志

常用Git命令使用教程 - SegmentFault 思否

如何克服解决Git冲突的恐惧症?(Git高级篇) - 掘金

Remote:远程仓库,是最旧的。

Repository:仓库区(或本地仓库)。

Index / Stage:暂存区,当前工作区中,通过git add先提交到暂存区,被git管理。

Workspace:工作区, 程序员进行开发改动的地方,是你当前看到的,也是最新的。

不定时更新签名:

/8250-modem/vendor/xiaomi/securebootsigner$ git fetch --all

~/8250-modem/vendor/xiaomi/securebootsigner$ git checkout remotes/miui/sectool-mi-dev

git查询修改

git status                                                      显示有变更的文件

git log                                                          显示当前分支的版本历史

git log --pretty=oneline                             显示从最近到最远的提交日志

git log --oneline                                              单行显示提交

git log --author=“author”                           可以查找某一个作者所有的提交

git reflog                                                     用来记录你的每一次命令,并且可恢复

git log --stat                                                 显示commit历史,以及每次commit发生变更的文件

git log -S [keyword]                                      搜索提交历史,根据关键词 

git log [tag] HEAD --pretty=format:%s        显示某个commit之后的所有变动,每个commit占据一行 

git log [tag] HEAD --grep feature                显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件

git log --follow [file]                                     显示某个文件的版本历史,包括文件改名

git whatchanged [file]                                  显示某个文件的版本历史,包括文件改名???

git log -p [file]                                              显示指定文件相关的每一次diff

git log -5 --pretty --oneline                         显示过去5次提交

git shortlog -sn                                            显示所有提交过的用户,按提交次数排序

git blame [file]                                              显示指定文件是什么人在什么时间修改过 

git diff                                                          显示工作区的修改

git diff --cached [file]                                   显示暂存区和工作区的差异

git diff HEAD                                                显示工作区与当前分支最新commit之间的差异 

git diff [first-branch]...[second-branch]        显示两次提交之间的差异

git diff --shortstat "@{0 day ago}"               显示今天你写了多少行代码

git show [commit]                                        显示某次提交的元数据和内容变化

git show --name-only [commit]                  显示某次提交发生变化的文件

git show [commit]:[filename]                      显示某次提交时,某个文件的内容

git branch                                                    查看目前所在分支

git status/git show                                      查看一下修改状态

git am -3 -k --ignore-whitespace   ../../../../../../368a1f5.diff      合并修改

git am --abort

git add操作--将工作区修改的内容提交到暂存区,交由git管理

git add                                当前目录的所有文件到缓存区

git add <dir>                     添加指定目录到暂存区,包括子目录

git add [file1] [file2] ...        添加指定文件到暂存区 

git add .                             添加当前目录的所有文件到暂存区

 git add -p                         添加每个变化前,都会要求确认 ,对于同一个文件的多处变化,可以实现分次提交????

git rm [file1] [file2] ...         删除工作区文件,并且将这次删除放入暂存区

git rm --cached [file]         停止暂存指定文件,但该文件会保留在工作区

git mv [file-original] [file-renamed]      改名文件,并且将这个改名放入暂存区

git reset HEAD <file>        取消add操作并保留修改

git checkout -- <file>       若继续该命令,则会删除掉刚刚的修改内容

git commit操作--将暂存区的内容提交到本地仓库,并使得当前分支的HEAD向后移动一个提交点。

git commit -s (--amend)                                  添加到版本库(-m 添加描述) 第一次就要用-s

git commit -m "wrote a readme file"              把文件提交到仓库

git commit -m <message>                             提交暂存区到本地仓库,message代表说明信息

git commit --amend -m <message>              使用一次新的commit,替代上一次提交,如果代码没有任何新变化,则用来改写上一次commit的提交信息

 git commit [file1] [file2] ... -m [message]        提交暂存区的指定文件到本地仓库

git commit -a                                                  提交工作区自上次commit之后的变化,直接到本地仓库 

git commit -v                                                  提交时显示所有diff信息

git commit --amend [file1] [file2] …                重做上一次commit,并包括指定文件的新变化

git reset --soft <commit_id>                          可以回退到某个commit并保存之前的修改

git reset --hard <commit_id>                         回退到某个commit不保留之前的修改

git push--上传本地仓库分支到远程仓库分支,实现同步

git push <remote><branch>                         上传本地指定分支到远程仓库

git push <remote> --force                              强行推送当前分支到远程仓库,即使有冲突

git push <remote> --all                                  推送所有分支到远程仓库

git revert <commit_id>                                   撤销Git push操作 

git push -u origin master                                把当前分支master推送到远程

git push origin master                                    把本地master分支的最新修改推送至GitHub

git reset--把当前分支指向另一个位置,并且相应的变动工作区和暂存区。

git reset --hard HEAD^                 (HEAD~100也可以)回退到上一个版本

git reset HEAD <file>                       可以把暂存区的修改撤销掉,重新放回工作区

git reset --soft <commit>                只改变提交点,暂存区和工作目录的内容都不改变

git reset --mixed <commit>            改变提交点,同时改变暂存区的内容

git reset --hard <commit>              暂存区、工作区的内容都会被修改到与提交点完全一致的状态

git reset --hard HEAD                      让工作区回到上次提交时的状态

git reset [file]                                   重置暂存区的指定文件,与上一次commit保持一致,但工作区不变 

git reset [commit]                            重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变 

git reset --keep [commit]                重置当前HEAD为指定commit,但保持暂存区和工作区不变

git revert–用一个新提交来消除一个历史提交所做的任何修改。

git revert [commit]                          新建一个commit,用来撤销指定commit, 后者的所有变化都将被前者抵消,并且应用到当前分支

 

 

revert与reset的区别:

git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,减少冲突。但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入,产生很多冲突。

git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。

git checkout

git checkout -- readme.txt               把readme.txt文件在工作区的修改全部撤销

git checkout                                     其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”

git checkout [file]                             恢复暂存区的指定文件到工作区 

git checkout [commit] [file]             恢复某个commit的指定文件到暂存区和工作区

git checkout .                                   恢复暂存区的所有文件到工作区 $ 

git checkout -b <branch-name>   新建一个分支,并切换到该分支

git checkout -b <branch-name>  <remote>   新建一个分支,并切换到该分支,并与远程分支绑定

git merge–把不同的分支合并起来

       在实际开发中,我们可能从master分支中切出一个分支,然后进行开发完成需求,中间经过R3,R4,R5的commit记录,最后开发完成需要合入master中,这便用到了merge。一般在merge之后,会出现conflict,需要针对冲突情况,手动解除冲突。主要是因为两个用户修改了同一文件的同一块区域。

git fetch <remote>                 merge之前先拉一下远程仓库最新代码

git merge <branch>               合并指定分支到当前分支

git rebase又称为衍合,是合并的另外一种选择。rebase也需要手动解决冲突

git rebase dev                         在开始阶段,我们处于new分支上,那么new分支上新的commit都在master分支上重演一遍,最后checkout切换回到new分支。这一点与merge是一样的,合并前后所处的分支并没有改变。通俗的解释就是new分支想站在dev的肩膀上继续下去。

git rebase -i pre_commitid      在原有commit顺序基础上修改指定的commitid

git rebase --continue              将commit及其之后的代码提交重新合并到工作分支。

merge与rebase的区别:

现在我们有这样的两个分支,test和master,提交如下:

D---E test

/

A---B---C---F master

在master执行git merge test,然后会得到如下结果:

D------E

/ \

A---B---C---F------------------G test, master

在master执行git rebase test,然后得到如下结果:

A---B---C---F---D'---E' test, master

可以看到,merge操作会生成一个新的节点,之前的提交分开显示。而rebase操作不会生成新的节点,是将两个分支融合成一个线性的提交。

如果你想要一个干净的,没有merge commit的线性历史树,那么你应该选择git rebase。

如果你想保留完整的历史记录,避免重写commit history的风险,你应该选择使用git merge。

git branch--涉及到协作,自然会涉及到分支,大概有展示分支,切换分支,创建分支,删除分支这四种操作

git branch                                        列出所有本地分支

git branch -r                                    列出所有远程分支

git branch -a                                   列出所有本地分支和远程分支

git branch <branch-name>            新建一个分支,但依然停留在当前分支

git branch --track <branch><remote-branch>             新建一个分支,与指定的远程分支建立追踪关系

git checkout <branch-name>                                        切换到指定分支,并更新工作区

git branch -d <branch-name>                                       删除分支

git push origin --delete <branch-name>                       删除远程分支

git branch [branch] [commit]                                         新建一个分支,指向指定commit

git checkout -                                                                 切换到上一个分支

git branch --set-upstream [branch] [remote-branch]     建立追踪关系,在现有分支与指定的远程分支之间

git merge [branch]                                                          合并指定分支到当前分支

git cherry-pick [commit]                                                 选择一个commit,合并进当前分支

git remote--远程仓库操作

git remote -v                                     显示所有远程仓库

git remote show [remote]                 显示某个远程仓库的信息

git remote add [shortname] [url]       增加一个新的远程仓库,并命名

git二分查找

# git bisect start               首先告诉git我们要開始binary search了。

#git bisect bad                 告诉git当前的commit是一个坏的提交

#git bisect good ad5e0    再告诉git我们已知的一个好的提交,这样子git就知道開始和结束的位置了,然后git会reset到中间的commit。

#git bisect good               这时候我们就位于中间到一个commit。我们能够编译执行看看执行结果。假设是好的。我们告诉git是好的。

#git bisect bad                 假设是坏的,我们告诉git是坏的。

就这样,你能够在lg(n)次找到第一个坏的commit。git找到后会给你打印出此commit的信息。

# git bisect reset             找到这个commit之后,不要忘记退出bisect。

其它指令

git fetch [remote]                             下载远程仓库的所有变动

git clean -df                                       强制删除未被追踪的文件,(删除编译产物)

git pull [remote] [branch]                  取回远程仓库的变化,并与本地分支合并

git cherry-pick <commit>                  选择一个commit,合并进当前分支

git init                                                 初始化一个Git仓库

repo forall -c  'echo ====$REPO_PROJECT===;git checkout -b after-adapt;'         对所有的工程都新建一个分支,分支名为 after-adapt

repo forall -c  'echo ====$REPO_PROJECT===;git checkout -f stable;git reset --hard HEAD;git pull;' 

repo forall -c  'echo ====$REPO_PROJECT===;git checkout -f new;git stash;git reset --hard HEAD^;git pull;git stash pop;'

repo forall -c  'echo ====$REPO_PROJECT===;git checkout -f stable;git stash;git reset --hard HEAD^;git pull;git stash pop;'

repo forall -c  'echo ====$REPO_PROJECT===;git reset --hard && git clean -df;' 

git stash                                             暂时将未提交的变化移除,即删除修改

git stash pop                                      稍后再移入

repo start new --all                            为每一个仓库建立new分支,并追踪远程分支

repo sync -c --no-tags -j4                  下载git仓库的时候,仅下载manifest中该仓库revision分支,其他分支不下载;不下载tags,提高下载速度

repo update ./

repo sync --force-sync

2020.11.5

git checkout --track miui/bsp-umi-r

(git checkout -b 05398129-mspl miui/bsp-qcom-r)

git pull

repo start patch1

修改后:

git add .

git commit  -s   (填写相应描述)

#git commit  --amend  (与上一个提交合并,仅用于上一个提交是自己 刚提交的)

repo upload --no-verify

解决冲突:git pull --rebase

1.新建一个最新的分支,同步远程仓

2.下载要解决冲突的patch:

git fetch ssh://gaoce@git.mioffice.cn:29418/vendor/xiaomi/modem_mbn 56a811c8d9ed6ffebf55ca33a4cdadbaa39aeffa && git reset --hard FETCH_HEAD

3.使用git pull合并

4.解提示的冲突,如:

warning: 抑制下仍有 2 个空白字符误用
warning: 7 行有空白字符误用。
回落到基础版本上打补丁及进行三方合并...
自动合并 xmbn/version/China/CT/Version.xml
冲突(内容):合并冲突于 xmbn/version/China/CT/Version.xml
自动合并 xmbn/common/mmcp/config/China/CU/mcfg_sw_gen_VoLTE-Commercial.xml
冲突(内容):合并冲突于 xmbn/common/mmcp/config/China/CU/mcfg_sw_gen_VoLTE-Commercial.xml
自动合并 xmbn/common/mmcp/config/China/CT/mcfg_sw_gen_hVoLTE_OpenMkt-Commercial.xml
冲突(内容):合并冲突于 xmbn/common/mmcp/config/China/CT/mcfg_sw_gen_hVoLTE_OpenMkt-Commercial.xml
自动合并 xmbn/common/mmcp/config/China/CMCC/mcfg_sw_gen_Volte_OpenMkt-Commercial.xml
冲突(内容):合并冲突于 xmbn/common/mmcp/config/China/CMCC/mcfg_sw_gen_Volte_OpenMkt-Commercial.xml
自动合并 xmbn/common/dataims/Configuration/NVConfigGroups/SIP/China/CU/overideconfig
自动合并 xmbn/common/dataims/Configuration/NVConfigGroups/SIP/China/CT/overideconfig
自动合并 xmbn/common/dataims/Configuration/NVConfigGroups/SIP/China/CMCC/OpenMktCommercial/overideconfig

5.git rebase --continue

6.git add .

7.git rebase --continue

8.repo upload --no-verify

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值