经常更新集合

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

2021-12-31  本文已影响0人  逆水寒Stephen

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的备注信息搜索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 <new-branch-name> <tag-name>
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

可同时设置上用户名和邮件,可以统计到贡献度和产生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 merge dev #合并dev分支到master上
git push origin master #将代码推到master上

只合并某一个分支的某一个commit,更多参数参考文章
git cherry-pick <commitHash> // git cherry-pick命令的参数,不一定是提交的哈希值,分支名也是可以的,表示转移该分支的最新提交
git cherry-pick <HashA> <HashB> // 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 分支上的。

上一篇下一篇

猜你喜欢

热点阅读