https://www.cnblogs.com/mjbin/p/5820942.html
Git简介:
Git是分布式的,这意味着它并不依赖于中心服务器来保存你文件的旧版本。任何一台机器都可以有一个本地版本的控制系统,其实就是一个硬盘上的文件,我们称之为仓库(repository)。如果是多人协作的话,你还需要一个线上仓库,用来同步代码等信息。
1.安装Git
2.配置Git(记录操作谁干的,到时候好甩锅)
$ git config --global user.name "My Name"
$ git config --global user.email myEmail@example.com
本地仓库(repository)操作:
1.创建一个新仓库 – git init
$ cd Desktop/git_exercise/
$ git init
2.检查状态 – git status
Git status是另一个非常重要的命令,它反馈给我们仓库当前状态的信息:是否为最新代码,有什么更新等等。
3.暂存 – git add
Git有个概念叫“暂存区“,你可以把它看成一块空白的画布,包裹着所有你可能会提交的变动。可以通过 git add 命令添加内容,最后使用 git commit 提交(创建一个快照)。
添加一个文件
git add filename
如果需要提交目录下的所有内容,可以这样做:
git add -A
同样可以做修改和删除
4.提交 – git commit
一次提交代表着我们的仓库到了一个新的状态,就像是一个快照,允许我们像使用时光机一样回到之前的某个时间点。
创建提交,需要我们至少在到暂存区有一次修改(刚才我们做了git add,可以是修改,删除),然后输入命令:
git commit -m "提交描述."
5.撤销修改 – git checkout(没有add,commit过的文件适用)
git checkout . (记得有个点)功能是本地所有修改的。没有的提交的,都返回到原来的状态。
git checkout -- filepathname 例如:放弃修改HomeScene.unity
6.撤销提交
git reset --soft commit的log
git reset --mixed commit的log
git reset --hard commit的log
软、混合、硬的区别就是,--soft
只撤销提交不撤销 add
上缓存区的内容,---mixed
会把 add
和commit
一起撤销。以上两个类型都不会改变本地的代码。---hard
会把本地的代码直接回滚到指定的 commit log 的时候,如果用了--hard
会发现自己在该 commit log 之后写的代码都不见了。
https://www.jianshu.com/p/672c2d7f6227
7.查看某次提交的文件
1. git log 查看提交历史记录
2. git log --oneline 或者 git log --pretty=oneline 以精简模式显示
3. git log --graph 以图形模式显示
4. git log --stat 显示文件更改列表
5. git log --author= 'name' 显示某个作者的日志
6. git log -p filepath 查看某个文件的详细修改
7. git log -L start,end:filepath 查看某个文件某几行范围内的修改记录
8. git log --stat commitId 或者 git show --stat commitId 查看某一次提交的文件修改列表
https://www.cnblogs.com/lsgxeva/p/9485874.html
8.删除分支 – git branch -d branchName
9.一个分支覆盖另一个分支(以下为分支branchname_B覆盖分支branchname_A的操作)
git checkout branchname_A// 切换到分支 branchname_A
git reset --hard branchname_B// 将分支branchname_A 用branchname_B覆盖
//将branchname_B 推送到 远程仓库origin 这一步,看需要。。。
git push origin branchname_B --force // 再推送到远程仓库
10.合并分支
git merge + 要合并的分支名称。合并之前先commit分支的修改。
远程仓库:
1.本地仓库链接远程仓库 – git remote add
把本地仓库链接到Github上,在命令行执行以下内容:
$ git remote add origin https://github.com/igeekbar/awesome-project.git
一个项目可以同时拥有好几个远程仓库,为了区分通常会起不同的名字。通常主要的远程仓库被称为origin。
https://github.com/igeekbar/awesome-project.git 远程仓库地址
2.上传到服务器 – git push
把本地的提交传送到服务器的动作叫做push。每次我们要提交修改到服务器上时,都会使用到git push。
$ git push origin master
origin 远程仓库名字 master 本地仓库默认分支名字
3.克隆仓库 – git clone
其他人下载远程仓库项目到本地,他们可以用git clone命令下载到本地。
$ git clone https://github.com/igeekbar/awesome-project.git
https://github.com/igeekbar/awesome-project.git远程仓库项目地址
本地会自动创建一个本地仓库,并创建一个默认分支,名字叫master,并自动将github上的版本设为远程仓库。
4.从服务器上获得修改 – git pull
更新远程仓库的代码到本地
git pull origin master
origin 远程仓库名字 master 本地仓库默认分支名字
分支
当你在做一个新功能的时候,最好是在一个独立的区域上开发(原始项目的拷贝),通常称之为分支。分支之间相互独立,并且拥有自己的历史记录,直到你决定把他们合并到一起。这样做的原因是:
- 已经可以运行的稳定版本的代码不会被破坏
- 不同的功能可以由不同开发者同时开发
- 开发者可以专注于自己的分支,不用担心被其他人破坏
- 在不确定哪个版本更好之前,同一个特性可以在不同的分支上创建多个版本,便于比较
1.创建新分支 – git branch
每一个本地仓库的默认分支都叫master, 创建新分支可以用git branch <name>命令:
$ git branch bugs
创建一个叫bugs的分支
2.切换分支 – git checkout
查看当前是哪个分支版本
* 号表示当前活跃分支为master,现在我们想在新分支上开发新的特性,使用git checkout切换分支。有一个参数表示要切换到的分支。
切换到分支chan_test。
3.合并分支 – git merge
我们在“bugs”分支想添加一个lalala.txt。和之前一样我们来创建文件、添加到暂存区、提交。
git add lalala.txt //添加文件lalala.txt到本地仓库分支bugs的暂存区
git commit -m "" //将bugs暂存区的文件lalala.txt提交到本地仓库分支bugs
切换回来本地仓库的默认分支master,lalala.txt文件没了
git checkout master
将本地仓库分支bugs的修改内容合并到默认分支master
git merge bugs
本地仓库默认分支master有lalala.txt文件了。
1.比对两个不同提交之间的差别
每次提交都有一个标识id,查看所有历史提交和他们的id
1.1 git log
commit ba25c0ff30e1b2f0259157b42b9f8f5d174d80d7 //提交id
Author: igeekbar //提交者
Date: Fri July 29 17:15:28 2016 +0300 //提交日期
New feature complete //提交说明
commit bc11c0ff30e1b2f0259157b42b9f8f5d174d80d7 //提交id
Author: igeekbar //提交者
Date: Fri July 29 17:15:28 2016 +0300 //提交日期
New feature complete //提交说明
id很长,但是当使用它的时候你并不需要复制整个字符串,前几个字符就够了。
git log --oneline 单行显示提交记录
git log --graph 经过简单排版的提交记录
git log -- branchname (branchname远程分支名字) 查看远程分支提交记录
1.2 显示某次提交的内容:
git show ba25
1.3 git diff [commitid1]..[commitid2]:
git show ba25..bc11
git diff 文件对比
1. git diff filepath 工作区与暂存区比较
2. git diff HEAD filepath 工作区与HEAD ( 当前工作分支) 比较
3. git diff --staged 或 --cached filepath 暂存区与HEAD比较
4. git diff branchName filepath 当前分支的文件与branchName 分支的文件进行比较
5. git diff commitId filepath 与某一次提交进行比较
https://www.cnblogs.com/lsgxeva/p/9485874.html
2.回滚某个文件到之前的版本
Git允许我们将某个特定的文件回滚到特定的提交,使用的也是 git checkout命令。
git checkout 09bd8cc1 lalala.txt
//09bd8cc1 =commit id lalala.txt文件名
3.回滚提交
如果你发现最新的一次提交忘记加入某个文件,或是信息输入的不正确,你可以通过 git commit --amend来改正,它会把最新的提交打回暂存区,并尝试重新提交。
如果是更复杂的情况,比如不是最新的提交除了问题,你可以使用git revert。
最新的一次提交别名也叫HEAD。
git revert HEAD or 其他版本提交 git revert ba25
4.解决合并冲突
手动解决完,提交到本地仓库分支,提交到远端仓库。
5.配置 .gitignore
大部分项目中,会有些文件、文件夹是我们不想提交的。为了防止使用git add -A时不小心提交,我们可以利用.gitignore文件:
- 在项目根目录创建.gitignore文件
- 在文件中列出不需要提交的文件名、文件夹名,每个一行
- .gitignore文件需要像普通文件一样add、commit和push
*.log // 后缀名是.log的
build/ build文件下的
node_modules/
.idea/
my_notes.txt //my_notes.txt文件
6.git 放弃本地修改,远程分支强制覆盖本地
git fetch --all //只是下载代码到本地,不进行合并操作
git reset --hard origin/分支名如master //把HEAD指向最新下载的版本
git pull //再从服务器拉取下最新的
7.git stash & git stash pop
git stash 代码改一半,不想提交到本地仓库分支,又不想放弃修改。暂时提交到栈中缓存。
git stash pop从栈中取出再使用
8.忽略文件
.gitignore文件中配置忽略文件夹和文件。这只能忽略没有被纳入过git版本管理的文件和目录,如果已经纳入git版本管理中,需要使用 git rm --cached 命令删除文件和目录的追踪状态(不删除文件),然后在.gitignore中添加不追踪的目录和文件。
git rm --cached "文件路径的文件名字"
9.查看已删除提交分支
git reflog
10.打包导出某次提交
git diff-tree -r—no-commit-id—name-only CommitId | xargs tar -rf 自定义压缩包名字.tar
11.查看某个文件提交记录(方便甩锅。。。)
git blame <filename> 例如:
git blame Assets/_Scripts/HomeScene/Views/DialogBase.cs
查看工程文件夹下的DialogBase.cs文件(从.git文件所在文件夹开始算路劲 Assets文件夹和.git文件同级)
12.查看某个文件的具体改动记录
git blame <filename> 例如:
git log --pretty=oneline Assets/_Scripts/HomeScene/Views/RoomInfoDialog.cs
查看工程文件夹下的DialogBase.cs文件(从.git文件所在文件夹开始算路劲 Assets文件夹和.git文件同级)
https://blog.csdn.net/xiaoxiaojie12321/article/details/80932888
总结一下:关于第一次上传github项目,步骤如下:
1、在Github上设置好SSH密钥
2、在本地创建一个版本库(即文件夹),通过git init把它变成Git仓库;
3、把项目复制到这个文件夹里面,再通过git add .把项目添加到仓库;
4、再通过git commit -m "注释内容"把项目提交到仓库;
5、通过git remote add origin +地址,将本地仓库和远程仓库进行关联;
6、最后通过git push -u origin master把本地仓库的项目推送到远程仓库(也就是Github)上;