一、git原理
- Git 有三种状态,你的文件可能处于其中之一: 已提交(committed)、已修改(modified)和已暂存(staged) 。此处不算未追踪(untracked)的文件
顺序是:add追踪,修改(状态变为已修改),add暂存(已暂存),提交(已提交)
已提交表示数据已经安全的保存在本地数据库中。
已修改表示修改了文件,但还没保存到数据库中。
已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。 - Git工作流程
在工作目录中修改文件。
暂存文件,将文件的快照放入暂存区域。
提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录
二、Git配置
- windows下 输入命令 git config -l 查看当前配置
- git config --global user.name “tiemaocsdn”
git config --global user.email "tiemaocsdn@qq.com"
git config --global push.default simple
三、连接远程仓库
https://www.cnblogs.com/wzd5230/p/4906448.html
- ssh链接主机需要密码验证
(1)使用命令检查是否本地用户主目录有名为.ssh的密钥保存文件夹和密钥文件 ls -al ~/.ssh
(2)建立密钥 ssh-keygen -t rsa -C “your email addr” 一直回车,进入pub文件复制密钥
(3)进入github—>settings–>SSH加入密钥
(4)检测是否能够ssh连接github ssh -T git@github.com - 连接远程仓库
git remote add shortname url shortname为远程仓库在本地别名,url建议git协议 - 上传到远程仓库
git push -u shortname master - 查看已连接的远程仓库
git remote
git remote -v 详细信息
注意:git clone后会自动与远程仓库连接,远程连接是以本地仓库为单位,即一个本地仓库可以与一个或多个远程仓库连接。而不是一个主机与若干远程仓库连接。 - git remote show [remote-name] 查看远程仓库信息
- git remote rename oldname newname 修改一个远程仓库的简写名
- git remote rm name 移除远程仓库
四、git命令(本地)
- 初始化仓库
本地 git init
服务器 git clone [url] myName
myName为clone下来的本地仓库名(默认为远程仓库名) - add 添加内容到下一次提交中
- git status 查看文件处于什么状态
(1)简短命令 git status -s
新添加的未跟踪文件前面有 ?? 标记
新添加到暂存区中的文件前面有 A 标记
修改过的文件前面有 M 标记。 你可能注意到了 M 有两个可以出现的位置,出现在右边的 M 表示该文件被修改了但是还没放入暂存区,出现在靠左边的 M 表示该文件被修改了并放入了暂存区。 - .gitignore
先创建gitignore.txt,再mv gitignore.txt .gitignore
在gitignore文件中写忽略的文件,如 星.log - 查看尚未暂存的文件更新了哪些部分,不加参数直接输入 git diff
- 查看已暂存的将要添加到下次提交里的内容 git diff --cached or git diff --staged
- 提交 git commit 进去后需要输入一些说明(为空无法提交)
或 git commit -m "descreption"
git commit -a Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤 - git rm 删除已经追踪的文件
git rm -f 不再追踪,同时删除文件
git rm --cached 不再追踪该文件,仍然在磁盘中 - git mv oldName newName 改名
- git log 查看修改日志
- git commit --amend 重新提交,注意是代替上次提交
- git reset HEAD --filename 将已暂存的文件,不再追踪,修改会留在本地
- git checkout – filename 删除对文件的修改(还未暂存),同时本地磁盘也会删除修改
五、fetch(抓取) pull push
- git fetch origin 本地仓库与远程仓库连接后,会存放远程仓库orign/master分支(或者其他分支)此时的位置。该命令的作用是:从远程仓库orign中,移动 origin/master 及其他分支指向新的、更新后的位置;并且获取远程仓库中的文件(在orign/master中,并非master中)。
要特别注意的一点是当抓取到新的远程跟踪分支时,本地不会自动生成一份可编辑的副本(拷贝)。 换一句话说,这种情况下,不会有一个新的 serverfix 分支 - 只有一个不可以修改的 origin/serverfix 指针。
注意:git branch不能看到远程分支,但可以git checkout进去。 - 合并远程分支
git merge origin/serverfix 将远程仓库serverfix分支上的工作合并到当前所在的分支 - 追踪分支
git checkout -b serverfix origin/serverfix 同 git checkout --track origin/serverfix
给你一个用于工作的本地分支,并且起点位于 origin/serverfix。相当于将远程仓库的serverfix分支复制到本地仓库,但fetch命令不会使本地仓库与远程仓库同步。 - git push (remote) (branch) 推送分支
- git push origin serverfix:awesomebranch 来将本地的 serverfix 分支推送到远程仓库上的 awesomebranch 分支
- git fetch orign ; git branch -vv 查看本地仓库与远程仓库领先(未提交)、落后(未合并)关系
- git pull= git fetch + git merge对于追踪的分支操作
- git push origin --delete serverfix 删除远程分支
- push是对分支进行操作
六、标签
- 附注标签 git tag -a v1.4 -m 'my version 1.4’
- 轻量标签 git tag v1.4
- 查看标签 git show v1.4
- 为以往版本打标签,git log 查看校验和
git tag -a v0.0 校验和 -m 'init v0.0’ - 共享标签 某个:git push origin [tagname] 所有:git push orign --tags
git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上。 - 删除标签
本地: git tag -d v1.4
远程仓库: git push origin :refs/tags/v1.4
七、分支
- Git 的分支,其实本质上仅仅是指向提交对象的可变指针。HEAD 想象为当前分支的别名
- 创建分支 git branch name
- 删除分支 git branch -d name
- 查看当前分支当前所指的提交对象 git log --oneline --decorate
- 切换分支 git checkout name 在切换分支时,一定要注意你工作目录里的文件会被改变。
- 项目分叉历史 git log --oneline --decorate --graph --all
输出你的提交历史、各个分支的指向以及项目的分支分叉情况 - 合并 git merge branch_name(将branch_name分支合并到当前分支)
(1)注意:若两个分支均对某个文件有修改,合并时会有冲突。
(2)fast-forward :master中merge hotfix
(3)合并提交:会创建一个新的提交
从一个更早的地方开始分叉开来。因为,master 分支所在提交并不是 iss53 分支所在提交的直接祖先,Git 不得不做一些额外的工作。 出现这种情况的时候,Git 会使用两个分支的末端所指的快照(C4 和 C5)以及这两个分支的工作祖先(C2),做一个简单的三方合并。
- 管理分支
(1)git branch 得到当前所有分支的一个列表
(2)git branch -v 查看每一个分支的最后一次提交
(3)–merged 与 --no-merged 这两个有用的选项可以过滤这个列表中已经合并或尚未合并到当前分支的分支
(4)查看哪些分支已经合并到当前分支 git branch --merged
git branch --no-merged同理
十、使用TortoiseGit**
- 设置–>Git–>编辑全局,在配置文件中加入
[credential]
helper = store - 在某个文件夹下,右键–>TortoiseGit–>克隆,输入URL即可克隆