基础- Git常用命令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ENLUW6cT-1592793303852)(https://github.com/gybin02/wiki/raw/master/git_big_jb51.jpg)]

  • 查看远程 Repo 地址
$ git remote -v
  • 查看 Repo 当前状态:
git status
  • 查看 所有分支
git branch -a
  • 新增文件
git add -A //or  git add . (add 全部)
  • 提交 内容
git  commit -m "Hello"
  • 提交 全部,包括 新增
git commit -am "Hello"
  • 还原提交:
git reset HEAD,   git reset HEAD^ (还原到前一个提交)
  • 拉取数据
git pull
>$ git pull <远程库名> <远程分支名>:<本地分支名>  

  • 推送数据
git push
:ab:  git push <远程主机名> <本地分支名>:<远程分支名>
  • 切换分支:
git checkout  feature_1.0
  • 新建分支并 切换分支 [本地分支][服务器分支,origin: 服务器地址]
git checkout -b feature_1.0 origin/feature_1.0
  • 推送的远程服务端分支:
git push origin feature_2.0
\\全新推送
git push -u origin master
  • 更改Git 远程地址,并推送到远程服务器
git remote set-url --add origin git@git.meiyou.im:zhengxiaobin/k9mail.git
 git remove -v
//删除旧的
git remote set-url --delete origin  git@github.com:scoute-dich/K9-MailClient.git
//Push 新的
git push origin master
// 可以直接用一句新的替代
 git remote set-url [--push] <name> <newurl> [<oldurl>]
  • 新增远程Git 服务器,然后可以一键Push到多个远程Git库
git remote set-url --add origin git@git.meiyou.im:zhengxiaobin/k9mail.git

或者:

git remote add gitlab git@github.com:gybin02/RouterKit.git
git push -u gitlab master

复制的功能: 本地开分支有修改,并拉取远程分支内容,合并

1. 新建dev 分支 
 git checkout -b dev 
2. reset 到最初提交
3. 关联远程分支, 
git remote add pb git@github.com:HujiangTechnology/gradle_plugin_android_aspectjx.git
4. 下载远程分支内容
git pull pb master
5. 合并dev 到 master
6.  remove github 远程分支。
  • git clone
git clone https://github.com/...
//clone 某个分支: 深度 depth
git clone -b b1 <--depth=100> https://github.com/...
  • 新增并推送新分支:
execCmd("git checkout -b "+branch_name)
execCmd("git push origin "+branch_name)
execCmd("git branch --set-upstream-to=origin/"+branch_name+" "+branch_name)

自带Vi 操作

  • 在「命令行模式(command mode)」下按一下字母「i」就可以进入「插入模式(Insert mode)」,这时候你就可以开始输入文字了。
  • 「ESC」键转到「命令行模式(command mode)」
  • 在「命令行模式(command mode)」下,按一下「:」冒号键进入「Last line mode」,可以退出vi及保存文件
: w filename (输入 「w filename」将文章以指定的文件名filename保存) 
: wq (输入「wq」,存盘并退出vi) 
: q! (输入q!, 不存盘强制退出vi) 

GitHub

  • 生成 Github badge

https://shields.io/

# Git 操作
$ git init #create repository
$ git add <filename> # add file
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."# commit
$ git rm <filename> # delete
$ git remote add origin git@github.com:michaelliao/learngit.git # 关联远程库
$ git push -u origin<远程> master<本地> #加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
$ git clone <gitaddress>
$ git checkout -b dev #创建并切换dev分支
$ git branch dev #创建dev分支
$ git checkout dev #切换dev分支
$ git branch #查看当前分支
$ git branch -d dev #删除分支
$ git branch -D <filename> #强行删除没有被合并过的分支
$ git merge dev #Fast-forward合并
$ git merge --no-ff -m <filename> <commit> #普通合并
$ git stash #把工作区暂存起来
$ git stash apply #恢复工作区,但是恢复后,stash内容并不删除
$ git stash drop #删除工作区
$ git stash pop #恢复的同时把stash内容也删了
$ git remote -v #查看远程仓库详细信息
$ git checkout -b dev origin/dev #创建远程origin的dev分支到本地
$ git branch --set-upstream dev origin/dev #关联本地和远程分支
$ git pull #从远程抓取分支

# Git 查看
$ git status
$ git diff <filename>
$ git log # 查看提交历史
$ git log --graph
$ git refog # 查看命令历史

# Git版本控制
$ git reset --hard HEAD^
$ git reset --hard <commit_id>
#场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令
$ git checkout -- <filename>。#其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
#场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,
第一步用命令 git reset HEAD <filename>,就回到了场景1,第二步按场景1操作。
#场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,前提是没有推送到远程库。
$ git reset --hard <commit_id>

# Git tags
$ git tag <name> #打标签(默认为HEAD)
$ git tag <name> <commit_id> #给指定节点打标签
$ git show <tagname> #展示标签详细信息
$ git tag -a v0.1 -m "version 0.1 released" 3628164 # 用-a指定标签名,-m指定说明文字
$ git tag -s v0.2 -m "signed version 0.2 released" fec145a # -s签名(gpg(GnuPG))
$ git tag #查看所有标签
$ git push origin <tagname> #推送本地标签
$ git push origin --tags #推送全部未推送过的本地标签
$ git tag -d v0.1 #删除本地标签
$ git push origin :refs/tags/v0.9 #删除远程标签

Git Clone depth 导致的问题;

导致 远程分支看不到,需要手动加上去

 git remote set-branches --add origin pregnancy-dev

eg:


40
down vote
You can get this error in the context of, e.g. a Travis build that, by default, checks code out with git clone --depth=50 --branch=master. To the best of my knowledge, you can control --depth via .travis.yml but not the --branch. Since that results in only a single branch being tracked by the remote, you need to independently update the remote to track the desired remote's refs.

Before:

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
The fix:

$ git remote set-branches --add origin branch-1
$ git remote set-branches --add origin branch-2
$ git fetch
After:

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/branch-1
remotes/origin/branch-2
remotes/origin/master
如果 git remote set-branches --add origin branch-1 分支打错,导致pull分支失败。
  1. open .git/config file
  2. 删除 [remote “origin”] fetch = +refs/heads/6796:refs/remotes/origin/6796

repository太大

最近遇到项目所使用的repository太大的情况,这种情况下如果要clone应该怎么做呢?

网上找了一圈,各种说法都有,我试了一下发现最好使的办法如下

git clone -depth 1 url

cd url

git fetch --depth 2

git fetch --depth 3 #注意这里可以是任意大的数字,只要你的buffer允许

最后

git pull即可

git shallow clone之后切换远程分支的方案

https://my.oschina.net/abcfy2/blog/817432
取回tag
这个很简单

git fetch --tags
重新把远程的tag fetch到本地的origin仓库即可,然后在git tag就会看到tag了,之后再用checkout就可以了。

取回分支
这个就不是那么好办了,因为这个要求shallow clone必须转换为deep clone。如果你不想删掉现在的仓库目录重新clone的话,需要做下面两步:

git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
git fetch --unshallow

其中,第一步git config是容易被忽视的,shallow clone之后,remote.origin.fetch的值是+refs/heads/master:refs/remotes/origin/master,所以会发现怎么fetch都没有其他分支。

其他

他只会把默认分支clone下来,其他远程分支并不在本地,所以这种情况下,需要用如下方法拉取其他分支:

$ git clone --depth 1 https://github.com/dogescript/xxxxxxx.git
$ git remote set-branches origin 'remote_branch_name'
$ git fetch --depth 1 origin remote_branch_name
$ git checkout remote_branch_name
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值