SourceTree 使用
1. 创建项目
a. 通过本地的file system: 就是在本地已经有了git项目,然后直接导入即可。可以找到需要的本地项目然后直接拖曳或者选择“addworking copy”绝对路径搜索添加都可以找到.
b. clone url或者是创建新的: 就是获取有效的git项目url后选择“clone repository”来下载工程到本地.
2.常用按钮
a. commit:提交代码改动
b.checkout:会切换不同的本地working copy
c.add:这个功能是将选择的未跟踪文件加入到source control中的版本跟踪控制中去
d. remove:移除掉本地working copy中的选择的文件使其不被跟踪和控制
e. pull:下载最新的代码更新到你当前的分支中去
f.push:上传代码,这个会弹出框体可能目前存在的多个可以提交的分支,注意只勾选需要提交的分支选项。
g. branch:创建新的分支
h. merge:将更改合并到当前分支
3.使用
l 传统姿势:先git add file再git commit -m"xxx"
l 快速提交当前所有文件的更改:gitcommit -am "xxx"会先add所有的更改然后提交
l 快速提交单个文件的更改:gitcommit file -m "xxx"只提交这个文件的更改
l 修改最后一次提交:git commit --amend -am "xxx"将当前的更改加入最后一次 commit 中并更改最后一次commit的信息。
l 新建一个名为“xxx”的分支并切换过去: git checkout -b xxx
l 切换到xxx分支:git checkout xxx
l 比较两个分支或commit: git diff xxx xxx
l 取消 commit : gitreset --soft HEAD~
l 取消 add: git reset
l 强制恢复到指定状态: gitreset --hard xxx
l HEAD发生的所有变化表: git reflog
l 两个commit复制到了当前分支上:git cherry-pick 0bda20e 1a04d5f
l 将分支branch3合并到master分支上: git merge branch3
l 放弃这次rebase:git rebase –abort
总结一下commit的几种姿势:
1. 传统姿势:先git add file再git commit -m "xxx"
2. 快速提交当前所有文件的更改:git commit -am "xxx"会先add所有的更改然后提交
3. 快速提交单个文件的更改:git commit file -m "xxx"只提交这个文件的更改
4. 修改最后一次提交:git commit --amend -am "xxx"将当前的更改加入最后一次commit中并更改最后一次commit的信息。其实观察可发现新的commit是替换了原先的commit,因为commit的hash已经变了。
总结一下checkout的几个功能:
1.分支相关操作:git checkout 分支名/commit hash切换到相应的分支或commit,加上-b参数则会创建分支并切换过去
2.恢复文件相关操作:git checkout [分支名/commit hash/HEAD快捷方式] -- 文件名恢复指定分支的最新commit或指定commit或快捷方式指向的commit的文件到工作目录,若省略中间的参数,则
n 暂存区有内容且暂存区内容与工作目录不同,则恢复暂存区的状态到工作目录
n 暂存区无内容,则恢复HEAD(最新的commit)的状态到工作目录
总结一下diff的各种情况:
1. git diff source target返回的结果是target相对于source的变化,这里的source和target可以是commit的hash/分支名/快捷方式
2. 如果只给一个参数,则这个参数就是source,而默认的target是工作目录,如果工作目录clean的话,则target为当前所在分支的最新commit
3. 如果一个参数都不给,默认的source是暂存目录,而target还是工作目录
4. 如果想要使暂存目录作为target的话,需要使用--cached参数
5. 在继续往下走之前,先将刚才的更改全部提交,运行git add test.txt和git commit -m"commit 8,9"。
总结一下reset的用法:
1. git reset [commit hash/分支名/快捷方式] [文件名]类似“git add的反操作”,直接将所在commit的文件状态恢复到暂存区域。省略commit则默认为HEAD,省略文件名默认为所有文件。只改变暂存目录,不改变工作目录,当前commit不变。
2. git reset --soft [commit hash/分支名/快捷方式]软恢复,将恢复前所在commit的文件状态恢复到暂存区,当前最新commit为参数中的commit。只改变暂存目录,不改变工作目录,当前commit改变。
3. git reset --hard [commit hash/分支名/快捷方式]硬恢复,强制将整个项目恢复为参数中的commit时的文件状态,清空暂存目录,工作目录clean。暂存目录和工作目录同时被改变,当前commit改变。
总结一下rebase:
1. git rebase 目标分支原理其实是先将HEAD指向目标分支和当前分支的共同祖先commit节点,然后将当前分支上的commit一个一个的apply到目标分支上,apply完以后再将HEAD指向当前分支。
2. rebase与merge的区别:把master分支合并到别的分支用rebase,把别的分支合并到master分支上用merge
3. rebase不会产生多余的commit,并且保持直线