Git常用指令记录

原创
2015/12/16 19:11
阅读数 905

简介

git有漂亮的WEB界面

非常自由的本地commit(不用担心是否影响到他/她人) 操作稍微复杂了一点点。

git属于分布式的版本管理工具。每个人都有全部的提交历史。

通过git push 和 git pull 将更新提交到远端

git的使用参考

参考: http://www.bootcss.com/p/git-guide/

入门

  1. 安装客户端(https://git-scm.com/downloads)
  2. 创建一个仓库 其中一种方法 创建一个目录 your-project 在目录下面执行命令 git init 第二种方法 git clone <仓库的地址>
  3. 添加与提交 git add * git commit -m “add some file"

1.4 推送改动 添加仓库的地址(如果不是clone出来的仓库,需要初始化下origin的地址)

git remote add origin <git-repo-server-addr>

推送

git push origin master

git的默认分支就是master(通过git branch可以查看当前的分支) 这句命令的意思就是将master分支里的内容,推送到名叫origin的远程仓库去。

工作流

  • working dir(工作目录):持有实际文件
  • index(暂存区):临时保存你的改动
  • HEAD:指向最后提交的结果

如何回退

从工作目录到暂存区

git add <file-name>

从暂存区到HEAD

git commit
git reset HEAD~   # 执行后,就行没有commit一样
git reset --hard HEAD~  # 这个有点暴力,执行后,就像你所有的修改也都没了

改动没有提交

git checkout <your-filename>

改动已经提交

git reset --hard HEAD~ # 放弃一次提交
git reset --hard HEAD~2  # 放弃两次提交
git reset --hard <sha-版本号> # 回滚到某个版本号

还有一种办法处理以及提交的问题(最新研究出来的)

# 查看历史,找到需要回滚到的版本
git log

# 回到那个版本, 注意后面那个 "."
git checkout <sha> .

# 然后commit就好了
git commit -am "...."

冲突的处理

使用文本编辑器,打开冲突的文件

处理完冲突后,

git add <冲突的文件>  # 跟svn比,没有svn resolved这一步
git commit -m “提交记录” 

如果执行了git merge,但是想放弃一次代码合并

git merge --abort

分支管理

创建,并却换到新的分支(如dev分支)

git checkout -b dev

却换回来(默认的分支是master)

git checkout master

合并分支的内容

git merge dev

如果有冲突,参考上面的,人肉处理就好了 删除远程分支(删除test)

git push origin :test

git的常用配置

git config --global color.ui true

设置忽略文件列表

ref: http://git-qa.gz.netease.com/gzleiyingfeng/git_course/tree/master

直接把需要忽略的文件列表放到.gitignore文件里就可以了

$ cat .gitignore
# frameworks/base    # 此为注释,被git忽略
*.a                  # 忽略所有.a结尾的文件
!lib.a               # 但lib.a除外,!
build/               # 忽略build目录下的所有文件
doc/*.txt            # 忽略doc目录下的所有.txt结尾文件,但不包含doc/notes/*.txt
/TODO                # 仅忽略项目根目录下的TODO文件,但不包含subdir/TODO

提交pull request

如何为一个commit提交pr

参考

  1. fork 一份代码(假定为 myfork ),myfork的主干始终和oschina-url的主干保持一致。

    1. 如何保持和主干的代码一致

      1. 设置upstream remote:git remote add upstream oschina-url
      2. 直接pull upstream remote: git pull upstream master
    2. 查看变更后更新

      git fetch upstream master
      git diff master FETCH_HEAD
      git merge FETCH_HEAD
      
  2. 新建 feature 分支,有任何修改都在该分支上进行开发。

  3. 从 upstream 的主干新建一个要 pr 的分支(假定为 pr-example),提取 feature 分支中要 pr 的修改。

    查看 feature 分支要pr的提交: git log (假定hash为 e1ad54d)

    # 创建pr-example分支
    git checkout -b pr-example upstream/master
    # 分支提取提交
    git cherry-pick e1ad54d
    # 提交到远程仓库
    git push -u origin pr-example
    
  4. 通过 pr-example 分支向 upstream 的主干发起 pull request。

  5. pr被接受之后,删除该分支

    git branch -d pr-example
    # 删除远端分支
    git push origin :pr-example
    

cherry-pick 使用:

  • 提取指定分支的 HEAD 提交:git cherry-pick totoro
  • 提取指定分支的 HEAD 往前 n 个提交:git cherry-pick totoro~n
  • 提取多个连续提交:git cherry-pick A..B,如 git cherry-pick totoro~4 totoro 会提取 totoro * 分支上 HEAD 前4个和 HEAD 本身共5个 commit,git cherry-pick e296145..a649050 会提取 e296145 和 a649050 之间(含)的所有 commit。

更多用法请参考git help cherry-pick

(注: pr是pull request的简称)

其他

ref: http://www.yangzhiping.com/tech/github.html

修行之道 关注大师的言行, 跟随大师的举动, 和大师一并修行, 领会大师的意境, 成为真正的大师。

其他优秀的资料

展开阅读全文
git
打赏
0
14 收藏
分享
加载中
更多评论
打赏
0 评论
14 收藏
0
分享
返回顶部
顶部