git学习笔记

1. git的四个工作区

  1. 工作区Working Area
  2. 暂存区Stage
  3. 本地仓库 Local Repository
  4. 远程仓库 Remote Repository

关系见图:

git学习笔记_第1张图片

2. 5种状态

未修改(Origin):原始文件
已修改(Modified)
已暂存(Staged)
已提交(Committed)
已推送(Pushed)

操作关系图:
git学习笔记_第2张图片

3. git配置

1. 三个配置文件:

  • /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
  • ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
  • .git/config 当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。

每一层都会覆盖上一层的同名配置。使用 --system, --global, --local and --file 选项操作对应的配置文件

  • git config --global user.name “username” 和

  • git config --global user.email “your email” 设置自己的信息、便于管理更改信息

  • git config --global https.proxy “” 清除proxy配置

  • git config --global alias.br branch //设置git别名

  • git config --global alias.co checkout

2. 设置git忽略的文件

cat .gitignore

# 此为注释 – 将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录下所有扩展名为 txt 的文件
doc/**/*.txt

4. git的基本操作

操作图:
操作关系图

1. 初始化项目

//基本操作流程
- git init      初始化git仓库、/.git/
- git clone git://github.com/schacon/grit.git 克隆一个仓库

查看远程配置:
- git remote -v

- git status 检查仓库文件状态

cd existing_folder
git init
git remote add origin http://git.code.oa.com/jasonye/gittest.git
git add .
git commit -m "do something."
git push -u origin master

2. 把文件添加到git暂存区

  • git add octocat.txt
  • git add ‘*.txt’
  • 取消已经暂存的文件:

    • git reset HEAD …" to unstage
  • 从暂存区移除文件:

    • git rm --cached … unstage文件
  • 取消已进行的修改

    • git checkout –

3. 提交文件到本地仓库

- git commit -m "commet message"
- git commit -m "remove all the cats"
- git commit --amend  修改上一次提交 //修改最新commit的message
- git log   查看日志
    1. 查看远程仓库
    • git remote

    • git remote add origin https://github.com/try-git/try_git.git

    • master 本地分支名字、orgin 远程名字

    • git remote show 显示所有远程库信息

    • git remote rename

    • git remote rm

3. 从本地仓库提交到远程仓库

git push [remote-name] [branch-name]
git push (远程仓库名) (本地分支名)
  • git push -u origin master -u表示记住master、origin
  • git push push所有的东西到仓库、

4. 从远程仓库拉取代码到本地

  • git pull origin master 拉取远程改变

git fetch

    1. 从远程仓库抓取数据
    • git fetch [remote-name]

    fetch、pull的差别:

    需要记住,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。参考:https://git-scm.com/book/zh/v1/Git-分支-远程分支

    使用 git pull 命令自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支。

5. 查看文件差异:

  1. 已修改未暂存 git diff
  2. 已暂存未提交 git diff --cached
  3. 已提交未推送 git diff master origin/master
    1. 查看本地修改、未被暂存代码、
    • git diff HEAD
  • 2.查看已经暂存、但是未被提交到本地仓库的代码

    • git diff —-staged(和cached效果相同)
    • git diff --cached
  • 3.查看本地仓库和远程仓库的差别

    • git diff master origin/master

    具体diff差异代码阅读:http://www.ruanyifeng.com/blog/2012/08/how_to_read_diff.html

6. 几种回滚操作

git reset 和 git revert
git reset //把本地分支回滚到之前的版本
git revert //把本地分支、回滚到之前的版本,并且分享给其他人、

1. 已修改未暂存,但未 add 的文件,想变回未修改的状态

git checkout – 1.go
// 如果想把所有文件都变回未修改的状态
git checkout – .

2. 已经stage的文件 git add ,回到add前状态

git reset
git reset – .
git reset --hard 70a1e67b //按版本号回滚
git reset HEAD 1.go

// 如果想把所有文件都未 add 的状态
git reset HEAD .
已经被 add 的修改,叫做 staged changes;未 add 的叫做 unstaged changes

3. 已ci,未推送,想回到上一个 commit 重新写

已经污染了“本地仓库”,需要从远程把代码取回来
git reset --hard origin/master

// 回到上一个 commit,把这个 commit 的修改变成 unstaged changes
git reset HEAD^
// 把 unstaged changes 变回未修改的状态
git checkout – .
// 重新写

4. 已推送,想回到上一个 commit

先恢复本地仓库,然后push到远程仓库
git reset --hard HEAD^
git push -f

5. 上个方法太暴力了

// 创建一个和上个提交完全相反的提交
git revert HEAD
git push

7. 分支管理

git分支的基本内容:
https://git-scm.com/book/zh/v1/Git-分支-何谓分支

查看分支:
git branch
git branch -a //查看所有分支、包含本地与远程
git branch -r //查看远程分支

创建分支:git branch 
切换分支:git checkout 
创建+切换分支:
git checkout -b 
合并某分支到当前分支:git merge 

删除分支:git branch -d  
删除远程分支:git push origin --delete  

2. 新建并切换到新的分支上

git checkout -b  []
git checkout -b  --track /     

如:git checkout -b serverfix origin/serverfix

3. 切换分支

  • git checkout clean_up

  • git checkout – 恢复文件最初的状态

  • git rm ‘*.txt’ 删除所有的文件

4. 修改分支?

  • git branch -m(-M) 给分支进行管理
  • git branch -v 查看分支最后一次提交信息

查看已经合并到当前分支、未合并到当前分支的信息

  • git branch --merged 合并的 --no-merged 未合并的信息

6. 推送到其他分支上去

如果希望和别人一起在名为 serverfix 的分支上工作,你可以像推送第一个分支那样推送它。

git push (remote) (branch):

*** 设置本地分支与远程分支的连接 ***
git push --set-upstream origin feature1

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

git branch --set-upstream-to=origin/ dev

  1. 在本地创建和远程分支对应的分支,使用
    git checkout -b branch-name origin/branch-name,
    本地和远程分支的名称最好一致;

  2. 建立本地分支和远程分支的关联,使用
    git branch --set-upstream branch-name origin/branch-name;

git checkout HEAD^22 //在分支之间快速移动,移动到当前的父分支上、

远程分支

git ls-remote
git remote show

远程仓库以:仓库名/分支名(remote)/(branch) 的形式命名。如origin/master分支。

git fetch

git pull = git fetch + git merge
fetch = fetch

  • git commit amending

git push origin : //推送请求到远程分支

master开发模式下,和中心仓储同步时,不要使用"git pull", 请使用 “git pull --rebase” 或 “git fetch; git rebase origin/master"以保持线性历史.

8. 几种合并操作

1. 分支的合并:

git cherry-pick o/master
git rebase o/master
git merge o/master

合并clean_up分支到当前分支:
  • git merge clean_up
  1. 冲突的合并
  • git mergetool 冲突解决图形化工具

  • git rebase //变基合并

  1. 合并分支到远程:
    git push origin jasonye_branch:develop

留心你的暂存区或者工作目录里,那些还没有提交的修改,它会和你即将检出的分支产生冲突从而阻止 Git 为你切换分支。切换分支的时候最好保持一个清洁的工作区域。

  1. cherry-pick
    git cherry-pick <提交号> //直接获取想要合并的提交号、

//交互式提交、–interactive
git rebase -i HEAD~4
git cherry-pick C4 C3 C2

1. rebase 分支变基的使用

git co -b bugFix
git ci -m "commit something"
git rebase master //把当前分支合并到master分支上

git rebase master topic // 把topic 分支合并到master上

实际上是取出一系列提交记录,“复制”它们,然后在另外一个地方逐个放下去。

rebase和merge一样,也是用于合并分支之间的代码

rebase操作可以把本地未push的分叉提交历史整理成直线;
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

2. git cherry-pick 用于捡取打补丁操作

对当前分支apply已有的commits

git checkout
git cherry-pick

git相关用法

3. rebase的用法:

//获取并且合并远程任务、
git fetch; git merge o/master; git push
git pull --rebase // git fetch 、rebase的缩写
git checkout -b totallyNotMaster o/master

9. stash–用于紧急修复bug内容

暂存当前工作内容

//暂存
git add .
git stash  //本地代码暂存到代码库里面

git stash list  //查看当前stash列表
git stash pop  //恢复stash工作内容,并且删除stash上的内容
git stash list 


git stash apply //恢复stash内容,并且不删除stash上内容,上
git stash drop //删除stash上的内容
git stash apply stash@{0} //恢复指定的stash内容

#10. Tag 打标签-用于记录某个特定版本、

  1. git tag 列出已有标签

  2. git tag -l ‘v1.4.2.*’

    git show v0.9 //查看标签信息

    git tag -a v0.1 -m “version 0.1 released” 1094adb //标签说明信息

    //推送标签到远程:
    git push origin v1.0
    git push origin --tags

    删除本地标签:
    git tag -d v0.9

    远程删除
    git push origin :refs/tags/v0.9 //把本地标签推送到远程

git树上移动

HEAD 记录位置:
相对引用非常给力,这里我介绍两个简单的用法:

使用 ^ 向上移动 1 个提交记录
使用 ~ 向上移动多个提交记录,如 ~3

git checkout HEAD^ //向上移动一个距离、
git checkout HEAD~4

git br -f master HEAD~3 //移动master 到 HEAD分支的前面节点、

10 远程仓库管理

git remote -v
git remote add origin  [email protected]:life/follow_feed_tmq.git
git remote remove master

9.git内部工作原理

1. 分布式git-分布式工作流程

疑问?

  1. 如何删除git上的文件?
  2. git文件目录乱码修改:
    git config --global core.quotepath false

参考资料:

https://git-scm.com/book/zh/v1/起步
https://bingohuang.gitbooks.io/progit2/content/

SVN的失踪Merge方法:
https://blog.csdn.net/imanapple/article/details/44563881

你可能感兴趣的:(其他杂项,git)