基础命令
git clone http://www.kernel.org/pub/scm/git/git.git 拉master分支
git add .
git commit -m "download xcos return json"
git push
git pull 更新远端代码到本地,类似svn的update
常用命令
查看git仓库地址
git remote -v
clone指定分支
git clone -b v2 https://git.oschina.net/oschina/android-app.git
带用户名和密码的git clone
git clone https://XXX:XXX@gitee.com/mirrors/minikube.git
查看本地分支
git branch
查看本地和远程分支
git branch -a
从某个远程分支中创建并切换本地分支
git checkout -b branchname origin/develop
从当前本地分支中创建并切换分支
git checkout -b branchname
创建分支
git branch branchname
切换分支
git checkout branchname
删除远程分支(慎用)
git push origin :<branchName>
从远程获取最新版本并merge到本地
git pull origin develop
git push origin develop的意思就是上传本地当前分支代码到develop分支,若远端分支develop不存在,创建之。
git push是上传本地所有分支代码到远程对应的分支上。
打标签
git tag -a tagname -m ""
git push origin <tagname>
查看已有标签
git tag
拉取标签
git checkout tag_name
删除本地分支
git branch -D br
查看状态
git status
撤销暂存区的修改
git reset HEAD file
撤销工作区的修改 (git checkout)
git checkout -- file
git checkout -- .
取回远程更新
git fetch <库名> [分支名]
git fetch origin CapRpoolWebsite_dev
还有其他一些命令:
检查修改 git diff
提交本地修改 git commit -m "log"
查看命令历史 git reflog
查看提交历史 git log
切换版本 git reset -hard commit_id
HEAD指向的版本就是当前版本 HEAD^表示前一个版本 HEAD^^表示前两个版本git reset -hard HEAD^^
合并指定提交 git cherry-pick fc7941df4ab8c42d3c3c9f651fa0bb8659d13d4b
git stash
将本地修改先缓存起来,git stash之后git status就看不到刚才的修改了,相当于顺带做了一个git checkout。
要恢复刚才的修改,可用git stash pop。
如果在stash和stash pop间做了git pull,有可能会有冲突,解决冲突即可。
冲突解决
方法一,选择已标记解决,然后自己手工编辑文件,将远端和本地的修改合并。
方法二,使用IDEA的冲突解决工具来编辑,很easy。
合并commit
git rebase -i 待合并的上一个commit点
修改上一个commit点的注释
git commit --amend -m "新的修改提交信息"
如果是多行,要这样输入:
git commit --amend -m "[TicketNo.]No0000
[Description] XXX修改
[Binary Source]NA"
git原理
工作区:
暂存区:stage,也叫index,即:git add之后的内容
本地仓:git commit之后的内容
可见,在本地有远程仓(remote repository)的一个镜像(例如,origin/master),git fetch只是拉取变更到这个镜像里,并不改变本地仓。git merge会把本地仓和远程仓镜像合并。git pull则是直接拉变更到本地仓,所以风险很高,不推荐。
回退的操作有三种:git reset、git revert、git checkout。其中,git reset回滚的是commit之后的内容(发生在本地仓),git checkout则回滚的是commit前的修改(发生在工作区),git checout – .会把所有工作区修改都丢弃掉。由于我们通常意义上的回滚都是在工作区,所以一般用的是git checkout。
三个命令的详解如下:
git reset [commit]
重置为[commit]所对应节点的提交(通过移动分支指针和HEAD指针实现),如果不指定[commit]则默认为HEAD
–soft 工作区和暂存区不变,重置仓库
–mixed 工作区不变,重置暂存区和仓库,此为默认选项
–hard 工作区、暂存区和仓库全部重置,修改完全丢失
git reset [commit] [file]
重置某个commit的指定文件到暂存区(指定了[file],不会移动分支指针和HEAD指针)
备注:如果不指定[commit]则默认为HEAD,如果参数都不指定则重置暂存区所有文件
git checkout [file]
重置暂存区的指定文件到工作区(file为 . 则表示所有文件)
git checkout [commit] [file]
重置某个commit的指定文件到暂存区和工作区
git revert [commit]
用[commit]所对应节点的提交,创建一个新的反转的提交
git配置
查看客户端当前配置
git config --list
git config作用域
从小到大:local -》 global -》system,分别是:项目级、用户级、整机级,可用-e命令查看实际文件:
git config -e
git config -e --global
git config -e --system
git配置文件路径
C:\Users\username\.gitconfig
git免密登录
git config --global credential.helper store
之后cd到项目目录,执行git pull命令,会提示输入账号密码。输完这一次以后就不再需要,并且会在根目录生成一个.git-credentials文件,里面的内容形如:
http://账号:密码@ip地址:端口号
repo
repo可以把多个git仓拼起来,启动命令:
# 初始化repo仓,但不会拉代码下来
repo init -u http://ip地址1:8080/algo -b mycode --no-repo-verify --depth=1
# 拉代码下来
repo sync -c -d -q -j4
# 中间会提示输入密码
常见问题
You have not concluded your merge (MERGE_HEAD exists)
先把本地修改备份(例如,使用git stash),再执行回退:
git reset --hard HEAD^
再把本地修改合入。
不要直接用git pull,用git fetch+git merge
git pull会破坏本地仓的代码,导致push不了,也难回退。
Your local changes to the following files would be overwritten by merge
如果希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下:
git stash
git pull
git stash pop
然后可以使用git diff -w +文件名 来确认代码自动合并的情况.
反过来,如果希望用代码库中的文件完全覆盖本地工作版本. 方法如下:
git checkout HEAD .
git checkout -- .
git pull
表示将工作区的所有修改丢弃掉。
windows换行符的处理
#提交时转换为LF,检出时转换为CRLF
git config --global core.autocrlf true
#提交时转换为LF,检出时不转换
git config --global core.autocrlf input
#提交检出均不转换
git config --global core.autocrlf false
仅拉取部分代码
比如只把代码仓里的工具脚本拉下来,忽略其他业务代码。
git init
git remote add origin http://代码仓地址:8080/code
git config core.sparsecheckout true
echo "clouds/worker-tools" >> .git/info/sparse-checkout
echo "clouds/cluster-tools" >> .git/info/sparse-checkout
echo "clouds/cluster.sh" >> .git/info/sparse-checkout
echo "clouds/docker-compose-cluster-bugfix.yml" >> .git/info/sparse-checkout
echo "clouds/docker-compose-cluster-dev.yml" >> .git/info/sparse-checkout
echo "clouds/docker-compose-cluster.yml" >> .git/info/sparse-checkout
git pull origin master
如果需要动态调整,执行:
# 如果需要添加目录,就增加sparse-checkout的配置,再checkout master
echo another_folder >> .git/info/sparse-checkout
git checkout master
拉取github的代码
首先,设置http_proxy代理。
接着,编译,如果报错:
fatal: unable to access 'https://github.com/kevinburke/go-bindata/': server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
规避方法为:
export GIT_SSL_NO_VERIFY=1
# or
git config --global http.sslverify false
详情参考:
https://stackoverflow.com/questions/21181231/server-certificate-verification-failed-cafile-etc-ssl-certs-ca-certificates-c
filename too long错误的解决
执行:
git config --system core.longpaths true