git 实用命令

git 实用命令

记录一下常用和实用的git命令,持续更新.

1.与项目的git仓库建立连接

> git clone git://github.com/xxxxxx/xxxx.git

可以直接通过url方式下载并创建一个本地仓库,与远端关联,或者在已有项目代码的基础上,通过init操作来初始化。
init会创建.git文件夹,里面包含git所需数据。 remote add可以与远程仓库建立连接,并给这个远程库起个别名

> git init
> git remote add origin git://github.com/xxxxxx/xxxx.git

2.拉取代码

  • 从origin远端拉取master分支代码,不合并,可以通过git checkout FETCH_HEAD 和 diff 查看分支内容,merge会把temp分支代码合到当前分支
> git fetch origin master 
> git temp		
  • 将远程master分支代码合到当前(或temp)分支,git pull = git fetch + git merge FETCH_HEAD
> git pull origin master<:temp>		

merge操作会将两个分支代码合并,并提交一个新的commit,这样整个提交记录树略显冗余,不够优雅,所以我们通常都是通过rebase来合并提交,rebase的原理就是将本地提交但未push的commit暂存起来,将远程新的commit追加到本地的代码库中,然后再将暂存的commit追加到代码中,成为最新的commit。这个过程中当然可能会有冲突,根据提示,修改冲突,add,然后continue

  • 作用同上条命令,只是选择了rebase方式,而不是merge
> git pull --rebase origin master<:temp>    
  • 关于冲突,修改起来也很简单 <<< 到 === 使我们本地的修改, === 到 >>> 是远程的修改,我们直接编辑冲突代码,git add,然后再根据相应提示来操作(在不同情况可能操作会不一样)
<<<<<<<<<<<<< HEAD
......
=============
........
>>>>>>>>>>>>> feature

3.提交代码

我再code过程中比较常见的提交流程:

> git status
> git add 项目文件
> git commit -m "xxxxxx"

* 将没有提交的,但有修改的文件先暂存起来,以便后面pull操作
> git stash
 
* 在push前,习惯先pull一下代码,解决冲突,如果有冲突,直接修改冲突文件 git add
> git pull --rebase origin remote_branch_name(master)

* 如果之前用stash保存的,修改完add,再stash,覆盖掉stash里的
> git push origin HEAD:refs/for/master

4.退回操作相关

  • 查看文件修改
> git diff				// 查看所有文件具体修改
> git diff --stat		// 查看文件修改列表
> git diff a.txt		// 查看某个文件具体的修改
  • 如果在编辑阶段,想撤销某个文件的修改
> git checkout -- a.txt 		// 将a.txt文件退回到上次commit状态
> git checkout .				// 撤销所有修改
> git clean -fd					// 清理所有untrack文件
  • 如果在添加阶段想撤销某个add文件
> git add -i		// 根据提示输入r,然后输入撤回文件编号,回车,最后回车结束
  • 想撤回到某次提交
> git reset <commit-id> 			// 此次commit-id之后的代码会变成已修改文件
> git reset --hard <commit-id> 		// 强制回到这个版本,之后的修改全部被冲掉

5.其他操作

  • 修改最后一个提交,补交
> git commit —-amend 
  • 查看某个文件被修改历史
> git log --pretty=oneline 文件名
> git show (hash)	详细改动
> git show --stat (hash) 文件列表
  • 更细颗粒度的查看每一次commit的信息, 通过--amend提交的也可追踪到,可以通过reflog找到相应的commitId,reset
> git reflog 
  • 查看stash 具体内容
> git stash list
> git stash show stash@{0} -u		// 查看某次暂存代码,-u显示详细内容
  • pull和push详细参数
> git pull <远程主机名> <远程分支名>:<本地分支名>
> git push <远程主机名> <本地分支名>:<远程分支名>
// 以下省略规则对于pull和push都适用
// <本地分支名>可省略,默认当前分支;
// 如果存在track,<远程分支名>可省略
// 如果只有一个remote,<远程主机名>可省略

> git push origin :master		// 删除远程分支
# 等同于
> git push origin --delete master
  • pre-commit插件,养成良好的codestyle是一个coder的良好素养,git官方给出通过hooks的pre-commit.sample

pre-commit配置
google java codestyle

  • 切换远程分支,最简洁的方式,在本地创建分支xxxx,-t或--track,是建立一个track,原远程分支建立关联
> git checkout -t origin/xxxx
  • 【拓展】.git 文件夹存放什么信息?
-rw-r--r--    1 cj  staff     1696  5 20 18:41 COMMIT_EDITMSG    //最近一次提交的commit message
-rw-r--r--    1 cj  staff       88  5 20 18:42 FETCH_HEAD
-rw-r--r--    1 cj  staff       25  5 20 18:42 HEAD    // 当前所在分支
-rw-r--r--    1 cj  staff       41  5 20 18:42 ORIG_HEAD    // 当进行一些有风险的操作的时候,如reset、merge或者rebase,记录上次提交的commit-id
-rw-r--r--    1 cj  staff      360  5 16 10:05 config    //配置信息,包括remote信息
-rw-r--r--    1 cj  staff       73  7 13  2017 description
drwxr-xr-x   14 cj  staff      448  7 20  2017 hooks    // 钩子,可以进行一些脚本操作
-rw-r--r--    1 cj  staff  3452216  5 20 18:43 index    // 索引中包含一个列表,列表根据文件名、文件模式和文件元数据进行了排序,以便快速检测文件的变化,可以通过 'git ls-files --stag' 查看index
drwxr-xr-x    4 cj  staff      128 11 28 09:56 info
drwxr-xr-x    4 cj  staff      128 11 28 09:56 logs
drwxr-xr-x  260 cj  staff     8320 12 31 16:42 objects    // 每次提交的hash作文件名来存储,通过头两位建文件夹的方式索引
-rw-r--r--    1 cj  staff     3476  2 19 10:17 packed-refs    // refs的打包
drwxr-xr-x    7 cj  staff      224  5 20 18:43 refs    // 分支
posted @ 2019-05-21 14:46  春卷要炸着吃  阅读(142)  评论(0编辑  收藏  举报