关系见图:
未修改(Origin):原始文件
已修改(Modified)
已暂存(Staged)
已提交(Committed)
已推送(Pushed)
每一层都会覆盖上一层的同名配置。使用 --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
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
操作图:
//基本操作流程
- 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
取消已经暂存的文件:
从暂存区移除文件:
取消已进行的修改
- git commit -m "commet message"
- git commit -m "remove all the cats"
- git commit --amend 修改上一次提交 //修改最新commit的message
- git log 查看日志
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
git push [remote-name] [branch-name]
git push (远程仓库名) (本地分支名)
git fetch
fetch、pull的差别:
需要记住,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。参考:https://git-scm.com/book/zh/v1/Git-分支-远程分支
使用 git pull 命令自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支。
2.查看已经暂存、但是未被提交到本地仓库的代码
3.查看本地仓库和远程仓库的差别
具体diff差异代码阅读:http://www.ruanyifeng.com/blog/2012/08/how_to_read_diff.html
git reset 和 git revert
git reset //把本地分支回滚到之前的版本
git revert //把本地分支、回滚到之前的版本,并且分享给其他人、
git checkout – 1.go
// 如果想把所有文件都变回未修改的状态
git checkout – .
git reset
git reset – .
git reset --hard 70a1e67b //按版本号回滚
git reset HEAD 1.go
// 如果想把所有文件都未 add 的状态
git reset HEAD .
已经被 add 的修改,叫做 staged changes;未 add 的叫做 unstaged changes
已经污染了“本地仓库”,需要从远程把代码取回来
git reset --hard origin/master
// 回到上一个 commit,把这个 commit 的修改变成 unstaged changes
git reset HEAD^
// 把 unstaged changes 变回未修改的状态
git checkout – .
// 重新写
先恢复本地仓库,然后push到远程仓库
git reset --hard HEAD^
git push -f
// 创建一个和上个提交完全相反的提交
git revert HEAD
git push
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
git checkout -b []
git checkout -b --track /
如:git checkout -b serverfix origin/serverfix
git checkout clean_up
git checkout – 恢复文件最初的状态
git rm ‘*.txt’ 删除所有的文件
查看已经合并到当前分支、未合并到当前分支的信息
如果希望和别人一起在名为 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
在本地创建和远程分支对应的分支,使用
git checkout -b branch-name origin/branch-name,
本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用
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 push origin : //推送请求到远程分支
master开发模式下,和中心仓储同步时,不要使用"git pull", 请使用 “git pull --rebase” 或 “git fetch; git rebase origin/master"以保持线性历史.
git cherry-pick o/master
git rebase o/master
git merge o/master
合并clean_up分支到当前分支:
git mergetool 冲突解决图形化工具
git rebase //变基合并
留心你的暂存区或者工作目录里,那些还没有提交的修改,它会和你即将检出的分支产生冲突从而阻止 Git 为你切换分支。切换分支的时候最好保持一个清洁的工作区域。
//交互式提交、–interactive
git rebase -i HEAD~4
git cherry-pick C4 C3 C2
git co -b bugFix
git ci -m "commit something"
git rebase master //把当前分支合并到master分支上
git rebase master topic // 把topic 分支合并到master上
实际上是取出一系列提交记录,“复制”它们,然后在另外一个地方逐个放下去。
rebase和merge一样,也是用于合并分支之间的代码
rebase操作可以把本地未push的分叉提交历史整理成直线;
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
对当前分支apply已有的commits
git checkout
git cherry-pick
git相关用法
//获取并且合并远程任务、
git fetch; git merge o/master; git push
git pull --rebase // git fetch 、rebase的缩写
git checkout -b totallyNotMaster o/master
暂存当前工作内容
//暂存
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 打标签-用于记录某个特定版本、
git tag 列出已有标签
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 //把本地标签推送到远程
HEAD 记录位置:
相对引用非常给力,这里我介绍两个简单的用法:
使用 ^ 向上移动 1 个提交记录
使用 ~ 向上移动多个提交记录,如 ~3
git checkout HEAD^ //向上移动一个距离、
git checkout HEAD~4
git br -f master HEAD~3 //移动master 到 HEAD分支的前面节点、
git remote -v
git remote add origin [email protected]:life/follow_feed_tmq.git
git remote remove master
https://git-scm.com/book/zh/v1/起步
https://bingohuang.gitbooks.io/progit2/content/
SVN的失踪Merge方法:
https://blog.csdn.net/imanapple/article/details/44563881