git命令总结

基础命令

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值