git 命令小总结

下载代码

git clone http://admin@192.168.0.208:7990/scm/klvchen/tale.git

设置用默认户名和密码登录,注意 URI 前面不允许有 http, 后面不允许有端口

vi ~/.netrc

machine 192.168.0.208
login   admin
password klvchen123456

使用 git 指令显示其 url 地址

git remote -v

查看本地分支

git branch 

创建本地分支 bugfix,切换到 bugfix 分支

# 方法 一
git branch bugfix
git checkout bugfix

# 方法 二
git checkout -b bugfix

查看远程所有分支

git branch -r 

关联远程的 dev 分支,在本地起名为 dev 分支,并切换到本地的dev分支上

git checkout -b dev origin/dev

推送远程分支

git push origin dev

克隆远程仓库中的指定分支 (git clone 默认是克隆 master 主分支)

# git clone -b <指定分支名> <远程仓库地址>
git clone -b development http://klvchen@b.klvchen.com/scm/next/product.git

查看所有的分支

git branch -a 

切换分支

git checkout master

删除分支

git branch -d dev

操作标签

git branch
* master

给当前分支打 tag

git tag rls_20170208

查看所有 tag

git tag

# 显示注解
git tag -n 

把标签推送到远端

git push origin rls_20170208

切换标签

git checkout rls_20170208

删除本地 tag

git tag -d ibacxx_test_20170210172424

查看远程的 tags

git ls-remote

删除远端 tag

git push origin :refs/tags/ibacxx_test_20170210172424
git push origin :ibacxx_test_20170210175756

# 说明
# origin 是远程主机名
# git push <远程主机名> <本地分支名>:<远程分支名>, 如果 : 前为空,则是用空的分支覆盖远端的分支

下载最新代码

git pull
git add -A   保存所有的修改

git add .    保存新的添加和修改,但是不包括删除

git add -u   保存修改和删除,但是不包括新建文件。

HEAD 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。

# 查看 HEAD
cat .git/HEAD , 

# 如果 HEAD 指向的是一个引用,还可用查看它的指向
git symbolic-ref HEAD 

撤销变更

git reset  # 通过把分支记录回退几个提交记录来实现撤销改动。(本地)
eg: git reset HEAD~1

git revert # 撤销更改并分享给别人(远程)
eg: git revert HEAD

git cherry-pick

# 选择某一个分支中的一个或几个commit(s)来进行操作(操作的对象是commit)。
# 使用方法如下:
git cherry-pick <commit id>

#查询commit id 的查询可以使用git log查询(查询版本的历史),最简单的语法如下:
git log 

git rebase

Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。
Rebase 的优势就是可以创造更线性的提交历史,这听上去有些难以理解。如果只允许使用 Rebase 的话,代码库的提交历史将会变得异常清晰。

eg: 合并 Bugfix 分支
git checkout Bugfix
git rebase master
git checkout master 
git rebase Bugfix

or
git checkout Bugfix
git rebase master
git rebase bugFix master

返回到某个节点(把自行新建的文件删掉)

git clean -df

git push 加了参数-u后,以后即可直接用 git push 代替 git push origin master

git push -u origin master 

git fetch

# 与git pull相比git fetch相当于是从远程获取最新版本到本地,但不会自动merge。如果需要有选择的合并git fetch是更好的选择。
# git fetch <远程主机名> <分支名>
git fetch origin master
# 取回的更新,在本地主机上要用"远程主机名/分支名"的形式读取。比如origin主机的master,就要用origin/master读取;

常见问题

1.error: The following untracked working tree files would be overwritten by checkout
是由于一些untracked working tree files引起的问题。所以只要解决了这些untracked的文件就能解决这个问题。
解决方式:

git clean -d -fx

参数说明:
-n 显示将要删除的文件和目录;
-x 删除忽略文件已经对git来说不识别的文件
-d 删除未被添加到git的路径中的文件
-f 强制运行

2.error: Your local changes to the following files would be overwritten by merge

# 方法一: stash
git stash
git commit
git stash pop

接下来diff一下此文件看看自动合并的情况,并作出相应修改。
git stash:       备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到 Git 栈中。
git stash pop:   从 Git 栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个 Stash 的内容,所以用栈来管理,pop 会从最近的一个 stash 中读取内容并恢复。
git stash list:  显示 Git 栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash clear: 清空 Git 栈。此时使用 gitg 等图形化工具会发现,原来 stash 的哪些节点都消失了。

# 方法二: 放弃本地修改,直接覆盖
git reset --hard
git pull

该方法小心操作,恢复参考:https://www.jianshu.com/p/390b6861b8c7
原文地址:https://www.cnblogs.com/klvchen/p/9516442.html