Git使用指南

常用命令

  • 提交日志:

    • 一行显示提交日志列表:git log --pretty=oneline

    • 最近两个礼拜的提交:git log --since=2.weeks

    • 某日期开始的提交:git log --since="2018-04-01"

    • 查看某个人的提交:git log --author=gitster

    • 组合查看:git log --since="2018-04-01" --pretty=oneline

  • 分支操作:

    • 查看分支:git branch

    • 切换分支:git checkout newBranchName

    • 创建分支:git branch newBranchName

    • 推送分支:git push origin newBranchName

  • 设置标签:git tag -a 1.0.0 -m 'Version1.0.0'

  • 推送标签:git push origin --tags

  • 回滚版本:git reset --hard b70e59944d312fff806b475a81a48bd914fb79ae

各种状态

秒懂Git的区和状态

1、首先了解下git所处的4种区 (工作区, 暂存取,本地仓库, 远程仓库)

  • 加入到暂存区:git add . / git add <file>

  • 加入到本地仓库:git commit -m "commit info"

  • 推送到远程仓库:git push origin master

2、git的5种状态

  1. 未修改(Origin)

  2. 已修改(Modified)

  3. 已暂存(Staged)

  4. 已提交(Committed)

  5. 已推送(Pushed)

3、git diff 对比修改

  • 已修改,未暂存:git diff

  • 已暂存,未提交:git diff --cached

  • 已提交,未推送:git diff master origin/master

git查看修改选项: 1. git status 查看修改了那些文件 2. git diff 查看具体修改的文件内容 3. git log -p files 查看某个文件的详细修改记录

4、撤销修改(观看上面的图)

  • 已修改,未暂存:git checkout . (git checkout )

  • 已暂存,未提交:git reset (git reset --hard 会覆盖)

  • 已提交,未推送:git reset --hard origin/master (远程仓库覆盖本地仓库)

  • 已提交,已推送:git reset --hard <commitID> (如果要覆盖远程必须强制推 git push -f)

修改Git commit message

仓库分类

1、本地仓库

创建并提交:

  • git init

  • git add .

  • git commit -m 'initial'

删除方式:

  • 方法一:ind . -name ".git" | xargs rm -Rf

  • 方法二:rm -rf .git

  • 方法三:直接删除 .git 文件(显示隐藏文件的情况下)

2、远程仓库

  • 查看远程仓库:git remote -v

  • 添加远程仓库:

    • 一般形式添加:git remote add origin git@xxx.git

    • 带密码形式添加:git remote add origin http://yourusername:password@git.oschina.net/xx-project.git

      • 注:比如同一台Mac操作多个GitHub账号的时候,需要使用到上述命令

    • 多个远程仓库的添加:

      • 添加github远程仓库:git remote add github git@xxx.git

      • 添加gitee远程仓库:git remote add gitee git@xxx.git

  • 移除远程仓库:git remote rm origin

    • 移除指定的github远程仓库:git remote rm github

  • 提交远程仓库:

    • 提交主分支代码:git push origin master

    • 提交开发分支代码:git push origin develop

  • 拉取远程仓库:

    • 拉取主分支:git pull origin master

    • 拉取开发分支:git pull origin develop

3、状态和日志

  1. 查看git状态:git status

  2. 查看有多少暂存:git stash list

  3. 查看提交历史:git log

    1. 注:会按提交时间列出所有的更新,最近的更新排在最上面

  4. 查看所有分支的所有操作记录:git reflog

    1. 包括commit和reset的操作,包括已经被删除的commit记录,

    2. git log则不能察看已经删除了的commit记录

  5. 暂存:git stash

分支

1、分支相关操作

  1. 查看本地分支:git branch(前面带“星号”的分支表示当前所在的分支)

  2. 查看远程分支:git branch -r

  3. 查看所有分支:git branch -a(远程分支会用红色表示出来(如果你开了颜色支持的话))

  4. 创建本地新分支:git branch newBranchName

  5. 切换到本地新分支:git checkout newBranchName

  6. 创建并切换分支:git checkout -b develop(一步到位)

  7. 推送本地新分支到 origin:git push origin newBranchName

  8. 重名名分支:git branch (-m | -M) <oldbranch> <newbranch> (注:m/M 至少选择一个)

2、删除本地分支

  • 删除分支:git branch -d branchName

  • 强制删除分支:git branch -D branchName

  • 注:-d,表示“在分支已经合并到主干后删除分支”。如果使用大写的-D的话,则表示“不论如何都删除分支”

  • 案例:

    • git branch -d ryan

    • git branch -d feature/reconstruction

    • git branch -d feature/darkMode

3、删除远程分支

删除远程分支,需要先将远程分支下载到本地,然后删除本地,然后提交

  1. git checkout <branchname>

  2. git push origin --delete <branchname>

  3. git push origin: <branchname>

  4. 案例:

    1. git push origin --delete ryan

    2. git push origin --delete feature/reconstruction

    3. git push origin --delete feature/darkMode

4、分支合并

把 develop 代码合并到 master 分支:

  • 直接创建 develop 分支并切换过去:git checkout -b develop master

  • 切换到 master 分支:git checkout master

  • 对 develop 分支进行合并:git merge --no-ff develop

    • 使用--no-ff参数后,会执行正常合并,在Master分支上生成一个新节点。为了保证版本演进的清晰,我们希望采用这种做法。

5、分支管理策略:

可以参照阮一峰的:Git分支管理策略

标签

  • 参考网址:Git-基础-打标签

  • 标签有两种类型:轻量级的(lightweight)和含附注的(annotated),但是不推荐使用轻量级的标签

1、创建标签

  1. 创建一个含附注类型的标签:git tag -a 1.0.0 -m 'tag info'

  2. 推送本地标签到云仓库:git push origin --tags

2、删除标签:

  1. 删除本地:git tag -d 2.0.0

  2. 删除远程:git push origin :refs/tags/2.0.0

一起执行删除本地和远程:git tag -d 2.0.0; git push origin :refs/tags/2.0.0

3、常用命令

  1. 显示标签列表:git tag

  2. 显示某个标签的详细信息:git show v1.0.0

  3. 推送本地标签到云仓库:git push origin --tags

  4. 后期添加标签:

    1. 查看提交历史:git log --pretty=oneline,获取提交唯一标识,比如 9fceb02。

    2. 某次提交添加标签:git tag -a v1.2.1 9fceb02

    3. 推送本地标签到云仓库:git push origin --tags

用户名/邮箱管理

1、全局配置

  • 查看全局设置命令:git config -l

  • 全局设置用户名:git config --global user.name "XXXX"

  • 全局设置邮箱:git config --global user.email "XXXX@gmail.com"

2、局部配置

注:项目单独配置的用户名具有比全局配置的用户更高优先级

配置方式一:使用命令设置: 1. 局部设置用户名:git config user.name "XXXX" 2. 局部设置邮箱:git config user.email "XXXX@gmail.com" 3. 设置查看命令:git config --list

配置方式二:直接修改文件: 1. 进入 .git 目录,找到 config 文件并打开 2. 修改 config 文件添加用户名和邮箱:

[user]
    name = XXXX
    email = XXXX@foxmail.com

撤销回滚

1、撤销当前修改

撤销当前的修改:git reset —hard

2、回滚到某次提交

回滚代码到某个版本 git reset --hard f8b05d07dc9220e79387b9a183e9ebaab97257cd git reset –soft f8b05d07dc9220e79387b9a183e9ebaab97257cd 会将之间的修改全部进行revert,然后在进行add commit操作就行了。

重置到某一版本:git reset 1d7f5d89346 恢复最后一次暂存的改动:git stash pop

3、回滚到某个标签

  1. 先 git clone 整个仓库

  2. 然后 git checkout tag_name 就可以取得 tag 对应的代码了

  3. 但是这时候 git 可能会提示你当前处于一个“detached HEAD" 状态,因为 tag 相当于是一个快照,是不能更改它的代码的,如果要在 tag 代码的基础上做修改,你需要一个分支:git checkout -b branch_name tag_name,这样会从 tag 创建一个分支,然后就和普通的 git 操作一样了。

代码冲突解决

  1. 提交代码到本地 Git

  2. 拉取代码,发现冲突:会显示冲突文件

1、解决方法一:直接打开文件修改

  1. Finder 中打开冲突文件

  2. 搜索关键词,快速定位冲突地方:<<<<<<< / >>>>>>> / HEAD

  3. 解决冲突

    1. 去掉被人代码

    2. 去掉自己的代码

    3. 合并代码

2、解决方法二:使用 Sourcetree 工具

  1. Sourcetree 打开工程

  2. 提交修改到本地

  3. 拉取远程代码,发现冲突文件

  4. 右键冲突文件,选择解决冲突

    1. 方式一:外部合并工具,选择Action,比如保存两者

    2. 方式二:使用我的版本,会直接修改

    3. 方式三:使用他人版本,会直接修改

  5. 提交合并代码的操作

  6. 推送到远端

其他使用

1、忽略文件

在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件的方法(如无,则需自己手工建立此文件)。这个文件每一行保存了一个匹配的规则例如:

# 此为注释 – 将被 Git 忽略

*.a       # 忽略所有 .a 结尾的文件
!lib.a    # 但 lib.a 除外
/TODO     # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/    # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

规则很简单,不做过多解释,但是有时候在项目开发过程中,突然心血来潮想把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

2、记住密码

让本地快速提交、记住密码的三种方法:

  1. 带密码形式的添加远程仓库:

    1. git remote add origin http://yourUsername:password@git.oschina.net/name/project.git

    2. git remote add origin http://yourUsername:yourPassword@xxx.com/xxproject.git

  2. 设置存储密码:

    1. 默认15分钟:git config --global credential.helper cache

    2. 自定义保存时长:git config credential.helper 'cache --timeout=3600'保存一小时

    3. 长期存储:git config --global credential.helper store

  3. 添加 SSH Key:

    1. 生成SSH:ssh-keygen -t rsa -C "XXXX@gmail.com"

    2. 查看SSH:cat ~/.ssh/id_rsa.pub

3、修改仓库名

  • 修改仓库名:git remote rename oldname newname (一般oldname是origin)

  • 注:以后推送时执行的命令就不再是 git push origin master 而是 git push newname master 拉取也是一样的

4、git ignore 配置

  • git ignore 可以配置 n 个的,每个文件夹下面都可以单独配置一个 ignore 文件

  • 可以针对不同的文件夹进行配置不同的 ignore 文件

5、一次提交所有分支的代码

  1. 方法一:git push origin --all

  2. 方法二:git push origin '*:*'

5、远程仓库地址修改了怎么办?

  • 当远程仓库地址修改了(比如仓库名称修改了 xx.git 修改成了 xxx.git )

  • 直接到本地仓库修改一下远程仓库的地址就可以了,不影响当前的提交以及已经提交的提交

SSH Key

1、常用命令

  1. 生成 SSH Key:ssh-keygen -t rsa -C "XXXX@gmail.com"

    1. 一路回车就好了,或者设置一个密码

  2. 拷贝 SSH Key:cat ~/.ssh/id_rsa.pub

  3. 添加 SSH Key:

  4. 测试 SSH Key:

    1. ssh -T git@git.oschina.net

    2. ssh -T git@github.com

  5. 获取 ssh key

    1. 方法一:vim ~/.ssh/id_rsa.pub

    2. 方法二:cat ~/.ssh/id_rsa.pub

2、关于码云可能添加不了 SSH Key 的坑,解决办法:

  1. ping gitee 网址:ping gitee.com,获取 ip 地址

  2. 添加218.11.0.86 gitee.com/etc/hosts文件中

  3. 第二步应该会遇到无法编辑的情况,解决方法:

    1. 拖动hosts文件到桌面

    2. 编辑hosts文件

    3. 拖回/etc/路径,选择鉴定,输入登录密码,搞定!!!

  4. ssh -T git@git.github.com(52.74.223.119)

3、SSH 提交方式,多用户的情况下配置:

Last updated

Was this helpful?