[持续更新] Git常用命令收录

git的忽略文件配置除了在项目的根目录下.gitignore还存在全局的.gitignore,一般是在用户根目录下的.gitignore_global

git项目配置信息查看
git config -l
git项目的地址查看
git remote -v
git remote get-url --all origin
git项目的地址删除
git remote rm origin
git项目的地址添加
git remote add origin git地址
git更新远程分支列表
git remote update origin --prune
git remote update origin -p
git同步远程全部分支列表
git fetch
git获取远程和本地全部分支列表
git branch -a
git获取本地全部分支列表
git branch
git基于分支新建分支
git checkout -b newbranch origin/xxbranch
git提交本地分支到远程指定分支
git push origin localbranch:remotebranch
查看commit的历史
git log
查看最新的commit Id
git rev-parse HEAD
git rev-parse --short HEAD
查看最新的commit Message
git log --pretty=format:"%s" -1 ${commit Id}
根据commit的备注信息搜索commit
git log --grep=要搜索的commit内容
查看某次commit的修改内容
git show
查看还没提交的修改
git diff
查看某个文件的修改历史
git log -p xxx/user/file/path
查看最近2次的更新内容
git log -p -2
clone 某个分支:
git clone -b dev5 https://git.coding.net/aiyongbao/tradepc.git
clone 所有分支:
git clone https://git.coding.net/aiyongbao/tradepc.git
git branch -r
git checkout dev5
clone 指定用户名和密码(邮箱账号中的@符号需要替换成%40):
git clone 账号:密码@https://git.coding.net/aiyongbao/tradepc.git
强制push
git push -u origin master -f
根据tag创建新的分支
git branch
git log filename
查看提交记录
git log -p filename
可以显示每次提交的diff
查看某次提交中的某个文件变化,可以直接加上fileName
git show c5e69804bbd9725b5dece57f8cbece4a96b9f80b filename
列出某个文件的所有改动历史,这里着眼于具体的一个文件,而不是git库
git log --pretty=oneline 文件名

解决git每次提交代码都要输入帐号和密码(代码意思为保存身份信息,接下来再提交的时候,输入一次帐号和密码之后就不需要再次输入)
git config --global credential.helper store
附加命令:
展示最新的配置属性: git config --list
查看目前 Git 使用的策略所在目录: git config --show-origin --get credential.helper
清除凭证助手: git config --global --unset credential.helper 除了global外,system、local等范围,完成后使用git config --list命令展示配置属性,只要不存在credential.helper表示清除成功(或者去用户根目录下打开.gitconfig 文件手动删除[credential] helper =xxx 保存也行 )

git提交包含了超过100M的大文件时会报错:remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com. To https://github.com/xxxx/xxxxx.git
1.安装Git命令行扩展。只需要设置一次 : git lfs install (也可用命令安装 Mac系统brew install git-lfs 或 Linux系统:sudo apt-get install git-lfs)
2.选择您希望Git LFS管理的文件类型: git lfs track "*.exe"
3.确保跟踪: git add .
4.然后commit,再push即可

可同时设置上用户名和邮件,可以统计到贡献度和产生gitee动态
git config --global user.name "username"
git config --global user.email "email"
查看设置的用户名和邮件
git config user.name
git config user.email

合并两个分支
git checkout dev #切换到dev开发分支
git pull
git checkout master
git push origin master #将代码推到master上

当前分支合并到另一分支时,如果没有分歧解决,就会直接移动文件指针。这个过程叫做fastforward
举例来说,开发一直在master分支进行,但忽然有一个新的想法,于是新建了一个develop的分支,并在其上进行一系列提交,完成时,回到 master分支,此时,master分支在创建develop分支之后并未产生任何新的commit。此时的合并就叫fast forward。
1、git merge dev
是将dev的分支合并到当前分支,应该默认是fast forward模式
2、git merge dev --no-ff
[具体区别](https://blog.csdn.net/qq_39416311/article/details/81264792)
--no-ff指的是强行关闭fast-forward方式。
ast-forward方式就是当条件允许的时候,git直接把HEAD指针指向合并分支的头,完成合并。属于“快进方式”,不过这种情况如果删除分支,则会丢失分支信息。因为在这个过程中没有创建commit
3、git merge dev --squash
是用来把一些不必要commit进行压缩,比如说,你的feature在开发的时候写的commit很乱,那么我们合并的时候不希望把这些历史commit带过来,于是使用--squash进行合并,此时文件已经同合并后一样了,但不移动HEAD,不提交。需要进行一次额外的commit来“总结”一下,然后完成最终的合并

只合并某一个分支的某一个commit,更多参数参考文章
git cherry-pick // git cherry-pick命令的参数,不一定是提交的哈希值,分支名也是可以的,表示转移该分支的最新提交
git cherry-pick // cherry-pick支持一次转移多个提交
git cherry-pick A..B // 转移一系列的连续提交,可以转移从 A 到 B 的所有提交。它们必须按照正确的顺序放置:提交 A 必须早于提交 B,否则命令将失败,但不会报错;注意,使用上面的命令,提交 A 将不会包含在 Cherry pick 中。如果要包含提交 A,可以使用语法:git cherry-pick A^..B

丢弃代码相关

  1. 未使用git add 缓存代码
    git checkout -- filename //注意中间有--
    放弃所有文件修改
    git checkout .
    此命令用来放弃掉所有还没有加入到缓存区(就是 git add 命令)的修改:内容修改与整个文件删除
    此命令不会删除新建的文件,因为新建的文件还没加入git管理系统中,所以对git来说是未知,只需手动删除即可
  2. 已使用git add 缓存代码,未使用git commit
    git reset HEAD filename
    放弃所有文件修改
    git reset HEAD
    此命令用来清除 git 对于文件修改的缓存。相当于撤销 git add 命令所在的工作。在使用本命令后,本地的修改并不会消失,而是回到了第一步1. 未使用git add 缓存代码,继续使用用git checkout -- filename,就可以放弃本地修改
  3. 已经用 git commit 提交了代码
    git reset --hard HEAD^//回退到上一次commit的状态
    git reset --hard commit id // 回退到任意版本,使用git log命令查看git提交历史和commit id

执行完commit后,想撤回commit,怎么办?
这样凉拌:git reset --soft HEAD^
这样就成功的撤销了你的commit(注意,仅仅是撤回commit操作,您写的代码仍然保留)
说一下个人理解:HEAD^的意思是上一个版本,也可以写成HEAD~1
如果你进行了2次commit,想都撤回,可以使用HEAD~2
至于这几个参数:--mixed 意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
--soft 不删除工作空间改动代码,撤销commit,不撤销git add .
--hard删除工作空间改动代码,撤销commit,撤销git add .
注意完成这个操作后,就恢复到了上一次的commit状态。

如果commit注释写错了,只是想改一下注释,只需要:git commit --amend
此时会进入默认vim编辑器,修改注释完毕后保存就好了

执行clone同时下载子模块的:git clone https://gitee.com/app_development/TestAndroid.git--recurse-submodules
(如果你已经克隆了项目但忘记了 --recurse-submodules,那么可以运行 git submodule update --init 将 git submodule init 和 git submodule update 合并成一步。如果还要初始化、抓取并检出任何嵌套的子模块, 请使用简明的 git submodule update --init --recursive)
如果网络不好或者其他原因导致子模块没有下载完全,这时用git pull是无法下载完全的,需要执行: git submodule update --init --recursive 检测继续下载

更新submodule的URL
执行 git submodule sync//更新 .gitmodules中对应submodule的条目URL, 更新 .git/config 中对应submodule的条目的URL

git 比较两个分支不同的commit
比如我们有 2 个分支:master, dev,现在想查看这两个 branch 的区别,有以下几种方式: undefined 1.查看 dev 有,而 master 中没有的:
1.查看 dev 有,而 master 中没有的:
git log dev ^master
同理查看 master 中有,而 dev 中没有的内容:
git log master ^dev
2.查看 dev 中比 master 中多提交了哪些内容:
git log master..dev
3.不知道谁提交的多谁提交的少,单纯想知道有什么不一样:
git log dev...master
4.在上述情况下,再显示出每个提交是在哪个分支上:
git log --left-right dev...master
commit 后面的箭头,根据我们在 –left-right dev…master 的顺序,左箭头 < 表示是 dev 的,右箭头 > 表示是 master的。undefined截图中表示这三个提交都是在 master 分支上的。

你可能感兴趣的:([持续更新] Git常用命令收录)