Git实用命令指南

1. 团队工作基本模型

建立初始远程仓库->各人拉取远程仓库到本地->建立自己的开发分支->开发完成后push新的分支到远程仓库,以保存且同步->review代码后无问题,合并到master分支

2. 创建并切换到自己分支工作

查看所有分支

git branch -a

说明:后面的参数-a表示查看所有的分支,主要应用于从远程pull下来的分支,因为远程拉过来的分支非自己创建的,所以直接git branch看不到
切换分支

git branch <分支名>

创建并切换到这条分支

git checkout -b <分支名>

把当前分支push到远程

git push origin <分支名>

说明:第一次创建远程没有的分支时,push需要带上分支名。后面git push不加参数时,就会默认推送到这个指定的分支了。
推送分支且和远程分支同步

git push origin <分支名> -u

说明:可以发现用上面的git push后,虽然把本地的分支推送上远程仓库了,但是此时想要git pull的话,会出现类似于这样一个提示

Git实用命令指南_第1张图片
image.png

意思就是说当前这个分支还没有远程跟踪,所以没有办法拉取远程代码。而在git push后面加一个-u就是解决这个问题。当然了,也可以不加这个参数,然后在pull的时候按照这个命令提示,加上远程分支的跟踪。

3.拉取远程仓库

初始拉取远程仓库

git clone 

说明:git clone操作会拉取远程仓库的所有分支,不过拉下来后默认是处于master分支,可以使用git branch -a来查看所有的分支。使用git checkout <分支名>来切换到指定分支。
同步远程代码到本地

git pull

说明:git pull不加分支名,表示拉取远程仓库所有默认同步的分支。这里默认同步的分支是初次git clone的时候远程仓库里包含的分支。git clone之后,远程仓库新添加的分支,则是拉不到的。如果要拉取新的分支,就需要指定分支名:git pull origin <分支名>

3. 文件的三种状态以及各自的撤销方法:

  1. 未加入暂存区
git checkout <文件名>
  1. 已加入暂存区,未提交更改
  git reset HEAD
  1. 已提交更改
 git reset --hard HEAD^

4. 快捷提交(add+commit)

git commit -a

5. 合并分支

假设当前HEADmaster上,需要合并feature1的分支

git merge feature1

这里会有这几种情况:

  1. master分支和feature1分支产生分叉,那么git会把feature1分支从分叉的地方开始的所有的更改内容合并到master上,并生成一个新的commit。但是master分支里不会有feature1分支的commit记录。
  2. master分支和feature1分支没有分叉且feature1分支领先于master分支。换言之,从master拉出feature1分支后,master分支一直没有任何提交,只有feature1分支有提交内容。此时git会执行fast-forward操作,直接把masterHEAD移动到feature1的位置上。同时master也会包含feature1的所有commit历史。此时masterfeature1处在同一commit的节点。
  3. master分支和feature1分支没有分叉且master分支领先于feature1分支。换言之,从master拉出feature1分支后,feature1分支一直没有任何提交,只有master分支有提交内容。此时git不会执行任何操作,命令行会提示Already up to date。反过来,切换到feature1分支,然后执行git merge master,可以将HEADfeature1移动到master的位置。与上面同理,feature1也会包含master的所有commit历史。此时masterfeature1处在同一commit节点。(这也映证了分支并无主次之分,所有分支都是平等的,并不会因为有的分支叫master就会针对它会有一些特殊性。--这是git的特性,github还是有写区别的)

6.实用黑科技

stash:临时存放工作目录的改动。在 Git 中,stash指令可以帮你把工作目录的内容全部放在你本地的一个独立的地方,它不会被提交,也不会被删除,你把东西放起来之后就可以去做你的临时工作了,做完以后再来取走,就可以继续之前手头的事了。
具体说来,stash 的用法很简单。当你手头有一件临时工作要做,需要把工作目录暂时清理干净,那么你可以:

git stash

就这么简单,你的工作目录的改动就被清空了,所有改动都被存了起来。
重新取出这个缓存继续之前的代码编写:

git stash pop

说明:
没有被 track 的文件(即从来没有被 add 过的文件不会被stash 起来,因为 Git 会忽略它们。如果想把这些文件也一起stash,可以加上 -u 参数,它是 --include-untracked 的简写。就像这样:

git stash -u

参考链接:
git push与pull的默认行为 https://segmentfault.com/a/1190000002783245

你可能感兴趣的:(Git实用命令指南)