2018-4-4 12:02:31 星期三
git常用操作流程简介:
如果本地有一个文件被修改了,
一, 如果我们希望保存这个更改, 那就执行命令: git add, 就会把修改后的整个文件拷贝压缩存储起来(即生成快照), 它存储到了本地的"暂存区"
二, 如果我们确定这个修改没问题了, 希望保存为项目的一部分, 那就执行git commit 命令, 就会保存到本地分支上去, 这一步会生成一系列对象,
这些对象保存的信息有:
1. 因为源文件被修改而生成的备份文件;
2. 当前项目或分支中所有最新文件的链接(以树形存储, 区分他们的层级关系),
3. 提交者的信息, 注释信息, 以及上一个提交保存的信息的地址等
三, 如果我们希望我的修改被其他同事知道, 就执行git push命令, 把本地更改的信息推送到远程版本库, 跟它合并
概念:
Tag: git 每一次提交都会生成一个40位hash的哈希值, 它关联了一个当时项目所有最新文件的连接, 因为这个hash值不好记, 所以可以用tag 命令生成一个好记得名字, 因此一个tag名对应一个commit
分支: 分支就是指向某一次commit的链接/指针, 分支名就是指针的名字
比如你以master分支为蓝本创建一个分支dev, 那这个dev里的所有文件地址其实都是指向master里的文件,
然后你对其中的某些文件进行修改, 修改后, 如果执行的commit命令, 那么会把这些被修改的文件生成一个副本, 它保存了修改后的最终内容, 但master里的这个文件还原来的文件内容, 而dev中没有被修改的文件依旧指向master中的对应文件 (可以理解为写时复制)
现在dev就不再指向master对应的那一堆文件了, 而是指向了包裹了新生成的备份文件和没有修改的文件的链接(注意不是文件内容而是它的链接)
快速合并: 如果dev分支包含了最新的内容, master只是他的一个子集, 那么快速合并, 就是简单的将master指针指向dev指针
参考:
2015-07-15 11:59:11
全局设置
git config --global user.name "username" //用户名
git config --global user.email email //邮箱
git config --global credential.helper store //记住密码
git config --list //查看配置信息
ssh-keygen -t rsa -C "abc@efg.com" // -C 注释
git pull : 相当于 SVN up
git status : 相当于 SVN st
git add a.txt: 新添加文件 或者 将文件修改保存到索引中, 和SVN add的作用一样
git checkout -- a.txt : 忽略本地对a.txt的更改, 将其改回之前的版本 (注意两个减号)
git commit a.txt : 提交到本地存储
git push : 提交到远程版本库中, 相当于 SVN ci
查看本地分支: git branch
查看远程分支: git branch -r
查看本地和远程分支: git branch -a
删除本地分支: git branch -D <branchName>
删除远程分支:
方法一: git push origin --delete <branchName>
方法二: git push origin :<branchName>
本地新建了分支, 需要同步到远程版本库中, 让其它小伙伴看到
git push origin 本地分支名:远程分支名
从远程检出分支到本地作为新的本地分支
git checkout -b 本地分支名 origin/远程分支名
pull强制覆盖本地改变
git fetch --all
git reset --hard origin/master
设置本地分支与远程分支关联
git branch --set-upstream debug origin/debug (已废弃)
git branch --track origin/serverfix
git push --set-upstream debug origin/debug (推送到远程, 并跟踪, 没有就创建)
git checkout --track origin/branch_name (从远程拉下来, 在本地新建分支, 并跟踪) (参考)
设置存储密码
[credential]
helper = store --file /mnt/thumbdrive/.git-credentials
helper = cache --timeout 30000
查看日志:
git log --pretty=oneline (单行查看日志)
查看敲过的命令
git reflog
对比当前工作区与上一个版本的差异
git diff --name-status HEAD~1
输出举例:
A aa
M test.log.bak
D test1.log.bak
git clone 直接带上用户名密码:
git clone http://username:password@remote
git reset HEAD //把暂存区的改动都撤回到工作区
git checkout . //把工作区的改动都撤销, 使代码变为改动之前的
git reflog show --date=iso master 查看master分支的各种事件的时间
git diff cc3bdd82 b359916f --stat 统计两次提交之间的文件变化
##在有文件的目录中初始化git仓库, 并与远程仓库合并
#git init
#git add .
#git commit -m "init"
#git remote add origin git@git.xxxxxx
#git pull origin master --allow-unrelated-histories
#git push --set-upstream origin
## 获取tag列表
正序: git for-each-ref refs/tags --sort=taggerdate --format '%(refname)'
倒序: git for-each-ref refs/tags --sort=-refname --format='%(refname)'