小强哥博客

小强哥,小强哥博客,技术大咖

Git经常使用的命令,也就那么几个

image

名词解释

git中的origin是什么?

origin 是默认的远程版本库名称,你可以在 .git/config 之中进行修改,事实上git push origin master的意思是 git push origin master:master(将本地的 master 分支推送至远端的master分支,如果没有就新建一个)。

git中HEAD表示什么?

在 Git中,用HEAD表示当前版本,也就是最新的提交commit id,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。例如:现在我们要把当前版本回退到上一个版本,就可以使用git reset命令:git reset --hard HEAD^

常用命令

克隆远程代码

git clone [url]

列出本地分支名称

git branch

列出远程分支名称

git branch -r

列出远程和本地分支

git branch -a

创建本地分支

git branch [name]

拉取一个远程分支

git checkout -b [name] origin/[branch name]

创建本地分支并且切换

git checkout -b [name]

切换分支

git checkout [name]

撤销本地分支所有修改(未commit)

git reset --hard HEAD

命令会撤销本地仓库中到最近一个HEAD,例如:测试某个功能,将项目结构、代码都搞乱了,可以通过此方式还原本地项目

撤销本地分支单个文件修改(未commit)

首先通过git status -s查看变动内容,如下

F:\project\test2>git status -s 
 M com/eju/ess/b.txt

接着执行下面代码,就可以对b.txt文件修改进行撤销

git checkout -- com/eju/ess/b.txt

撤销修改(已commit)

git revert HEAD
git push

将本地分支推送到远程仓库

git push origin [name]
或者
git push origin [local_name]:[remote_name]

这命令也就是我们常说的在远程创建分支,实际上就是将本地分支推送到远程。

将本地现有的分支和远程分支建立追踪关系

git branch --set-upstream-to=origin/[name]

该命令一般用在本地新建一个分支后,必须要做远程分支关联,如果没有做关联在执行git pull或者git push的时候会出现问题3。

删除本地分支

git branch -[d|D] [name]

-d:普通删除,详见[问题2]。

-D:强制删除。

删除远程分支

git push origin --delete [name]
或者
git push origin :[name]

git push origin :[name] 会删除远程分支,但是本地分支依然会留下。

常用组合

正确的在远程创建分支

git branch [name]
git checkout -b [name]
git push origin [name] | git push origin [name]:[name]

正确的删除一个本地分支和远程分支

git branch -d [name] | git branch -D [bame]
git push origin --delete [name]

正确的将远程代码同步到本地

非冲突方式

不安全的操作
git pull
或
git fetch origin [name]
git merge [name]
安全的操作
git fetch origin [name]:tmp
git diff tmp
git merge tmp

常见问题

问题1

warning: push.default is unset; its implicit value has changed in Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the traditional behavior, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

When push.default is set to 'matching', git will push local branches to the remote branches that already exist with the same name.

Since Git 2.0, Git defaults to the more conservative 'simple' behavior, which only pushes the current branch to the corresponding
remote branch that 'git pull' uses to update the current branch.

See 'git help config' and search for 'push.default' for further information. 

(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)

Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 258 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@git.oschina.net:xiaoqiangge/testgit.git
   4fbadc9..00f3581  master -> master

事实上这并不会影响你push的结果,最终push还会成功,因为这只是一个”warning“ 你可以按照他说的那样运行:git config --global push.default matching或者git config --global push.default simple命令,以后再push就不会有警告了。

下面说一下push.default matching和push.default simple的区别:

push.default设置maching的意思是:git push会把你本地所有分支push到名称相对应的远程主机上。这意味着可能你会在不经意间push一些你原本没打算push的分支。

push.default设置成simple的意思是:git push仅仅把当前所在分支push到从当初git pull时pull下来的那个对应分支上,另外,这个过程也会同时检查各个分支的名称是否相对应。

问题2

error: The branch 'develop' is not fully merged.If you are sure you want to delete it, run 'git branch -D develop'.

原因是分支有没有合并到当前分支的内容,解决方法执行git branch -D XXX强制删除本地分支。

问题3

There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> develop

原因是在新创建完本地分支以后,没有执行git branch --set-upstream-to=origin/[name]将本地分支和远程分支做关联。