[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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分支失败。
- open .git/config file
- 删除 [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