Git命令行基本操作

个人偶尔用但是经常忘记的命令记录

1、Git进行代码回滚的操作:

git如何正确回滚代码 - sexy_girl - 博客园
git撤销add,撤销commit,撤销push总结
git撤销提交(commit)
撤销最近的一次未push的commit记录:
git reset [--mixed] 倒数第二次提交的commitId(–mixed是默认的方式,可以省略)

2、Git修改提交信息:

修改最新一次:git commit --amend
修改非第一次:git rebase -i 修改的上一次的提交哈希
修改第一次:git rebase -i --root
【Git学了就忘-实操(二)】修改已提交commit的message
下面的博客修改commit的用户信息:
如何修改git commit的author信息

3、Git清理远程已经删除但本地还存在的分支:

可使用命令:git pull -p
GIT 清理远程已删除本地还存在的分支
或:git remote prune origin
git清除本地存在远程已经删除的分支

4、基于某个提交新建分支:

git checkout -b branchname <commitId>

5. 继承种子工程

我要做的事:建一个新项目,先继承一个已有种子项目的所有commit,然后在新项目上开始开发新东西。
————————————————————————————————
前提:已有一个git种子工程项目,比如叫SEED。
步骤:

  1. 首先按照普通步骤新建一个空的git项目,然后再本地新建项目目录,完成本地项目与远程git项目的关联:
mkdir 项目目录名称
cd 项目目录名称
git init
touch README.md
git add README.md
git commit -m "Initial commit"
git remote add origin http://xxxxxx(新项目的git地址).git
git push -u origin master
  1. 然后添加已有的种子工程的源,命名为seedOrigin:
    git remote add seedOrigin http://xxx(种子项目工程的git地址).git
  2. 然后先fetch种子工程需要的分支到本地
    git fetch seedOrigin master (比如我们需要使用种子源的master分支)
    然后再基于种子源的对应分支新建一个本地分支与之对应:
    git checkout -b seedMaster seedOrigin/master
    这样我们就把种子项目工程已有的提交都拉到了本地。如果需要在本地修改seedMaster分支的代码,并且推送到对应的种子工程远端的话,需要设置
    git push seedOrigin HEAD: master
  3. 随后我们切换回新项目的master分支
    git checkout master
    然后把拉取到本地的种子项目工程的已有commit合并到新项目的master,完成对现有commit的继承
    git merge seedMaster --allow-unrelated-histories
    需要加上--allow-unrelated-histories,否则会报错fatal: refusing to merge unrelated histories,因为新项目与种子项目两个分支没有任何关联。
  4. 最后,只需要把继承了种子工程commit的master分支push到新项目的远端即可。后续直接在新项目的master分支可以开发新内容。

Git命令行基本操作

0. 安装Git

网上有很多Git安装教程,如果需要图形界面,windows下建议使用TortoiseGit,linux建议使用Git GUI或者GITK。

1. Git基本配置

git config可以配置git的参数,可以使用git config --list查看已经配置的git参数。其中有三个级别的保存位置,–system、–global、–local,分别表示所有用户(本系统)、当前用户(全局)、本地配置(当前目录),默认使用–local。

配置用户名及邮箱

在使用Git提交前,必须配置用户名和邮箱,这些信息会永久保存到历史记录中。

git config --global user.name "Tocy"
git config --global user.email zyvj@qq.com

其他配置

如果在windows下建议还是配置下默认文本编辑器core.editor和差异分析工具merge.tool。

2. 创建Git仓库

可以直接调用git init初始化当前目录,即创建Git仓库。

3. 获得Git仓库

如果需要克隆远程仓库,可以使用git clone,比如:

git clone https://git.oschina.net/Tocy/SampleCode.git

4. 提交更新

在windows下的Git GUI中,提交很简单,右键-TortoiseGit-Commit。那么命令行下需要怎么处理?
Git中每个文件都有三种状态:committed、staged、modified。它们之间关系如下:

commit <-- stage <-- modify
commit --> — --modify

我们获取的Git仓库中的所有文件都是committed状态,如果你在本地修改了文件a,a的状态就变成modified的;如果使用git add a,a的状态变成staged;如果使用git commit,a的状态就变成commited。这种状态变化也说明复制代码是很方便的,但是提交更新请慎重。
当然还有一种文件状态,未跟踪状态(unversioned/untracked),通过使用git add可以把未跟踪状态变更为staged;通过git rm可以将staged或者committed状态变为未跟踪状态。

git status

通常提交前先检查下修改了什么内容,当前Git目录下各文件的状态。

$ git status
On branch master

Initial commit

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        Readme.md

nothing added to commit but untracked files present (use "git add" to track)
git add

git add可以添加文件或者目录,也可以使用通配符。比如:

git add Readme.md    # add file only
git add *.cpp        # add all cpp files
git add /home/code/  # add all files in /home/code
git diff

git diff可以查看当前目录的所有修改。
提交之前,还是单独确认下处于staged状态的文件有哪些,并保证修改正确。在实际应用中,可能还需要使用git diff导出PATCH做代码走读。
可以使用git diff --staged或git diff --cached查看staged与上次提交快照之间的区别。

git commit

提交前需慎重。直接调用git commit会弹出编辑器,输入提交日志(如果是多行日志,建议使用)。
针对单行日志提交的情况,可以使用如下命令:git commit -m “add readme”。
还有一种快捷的提交方式,直接跳过stage缓存区,直接提交当前目录下的所有修改git commit -a(使用这个命令前建议确认下当前目录的修改是否正确、必须)。

git rm

git rm会把文件从当前目录删除(不会保存删除的文件)。如果需要从Git仓库中删除,但保留在当前工作目录中,亦即从跟踪清单中删除,可以使用git rm --cached readme.md。

5. 提交历史查看

可以使用git log查看当前工程的所有提交的日志。

git log --stat      # 仅显示摘要选项
git log --pretty=oneline        # 定制记录格式
git log --graph     # 图像化分支和版本更新

6. 撤销更新

7. 远程仓库

可以使用git remote查看当前的远程库。

查看远端列表:
git remote -v
可以显示对应的克隆地址。(对于多个远程仓库很有用)

重命名远端名称:
git remote rename 原名称 新名称

修改当前远端的url:
git remote set-url 远端名(如origin) 新的远端地址(http://xxx.git)

添加一个远端:
git remote add 远端的命名 远端地址(https://xxxx.git)

当前远端的当前分支重命名:
git branch -m 当前分支名称(master) 新名称(seedMaster)

修改当前分支对应track的远端分支
git branch --set-upstream-to=[远端名origin]/[远端分支名remote_branch] [本地分支名your_branch]
这块修改已经有远端track的分支的track的话,可能需要执行:
git push seedOrigin(新远端名) HEAD:master

基于当前的代码新建一个分支:
git branch [new_branch新分支名] – 这种方式是基于当前新建一个分支,单不自动切换过去
git checkout -b [new_branch新分支名] – 基于当前新建一个分支,并切换到新分支

将当前的分支推送到远端,本地分支与远端分支建立关联关系:
git push --set-upstream origin(远端名称) master(需要关联的远端的分支名称)

添加远程仓库

git remote add [short_name] [url]
可以添加新的远程仓库。

// 如在本地目录下关联远程repository :

git remote add origin git@github.com:git_username/repository_name.git

// 取消本地目录下关联的远程库:

git remote remove origin
从远程仓库抓取数据

git fetch [remote-name]
可以从远程仓库抓取数据到本地。
也可以使用
git pull

从远程服务端获取分支到本地
一、查看远程分支
使用如下Git命令查看所有远程分支:
git branch -r
二、拉取远程分支并创建本地分支
i. 方法一
使用如下命令:
git fetch origin 远程分支名x:本地分支名x
使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout。

// 获取最新代码
git fetch origin master
// 比较本地的master分支和origin/master分支的差别
git log -p master..origin/master
// 合并
git merge origin/master

其实可以用以下更清晰的方式来进行:
当前在test分支,
先从远程获取最新的版本到本地的test分支上,
然后之后再进行比较合并。

git fetch origin master:tmp
git diff tmp 
git merge tmp

ii. 方式二
使用如下命令:
git checkout -b 本地分支名x origin/远程分支名x
使用该方式会在本地新建分支x,并自动切换到该本地分支x。

iii. 方式三
使用如下命令:
git pull origin master
pull命令相当于是从远程获取最新版本并merge到本地,即git fetch + git merge。使用fetch更安全,可以看看更新情况再合并。

推送数据到远程仓库

git push [remote_name] [branch_name]
默认使用origin和master。

查看远程仓库信息

git remote show origin

远程仓库的删除和重命名

git remote rename [old_name] [new_name]
git remote rm [remote_name]

删除远程分支和tag
在Git v1.7.0 之后,可以使用这种语法删除远程分支:

$ git push origin --delete <branchName>

删除tag这么用:

git push origin --delete tag <tagname>

否则,可以使用这种语法,推送一个空分支到远程分支,其实就相当于删除远程分支:

git push origin :<branchName>

这是删除tag的方法,推送一个空tag到远程tag:
git tag -d <tagnam
git push origin :refs/tags/
两种语法作用完全相同。

8. 打Tags

可使用git tag显示当前库中的标签。

添加标签(含附注)

git tag -a v0.1 -m "my version 0.1"
使用如下命令查看Tag日志信息(指定对应标签的名字)
git show v0.1
也可使用SHA-1的提交表示创建tag:
git tag -a v0.2 [SHA-1] -m "my version 0.2"

分享标签

默认的,git push不会推送标签信息到远程仓库,需要通过命令显式推送。
git push origin v0.1
如果需要推送所有标签,使用
git push origin --tags

9. Git分支

git分支是轻量级的,速度很快,仅记录索引信息。

显示所有分支

使用git branch可显示当前所有分支。
可以使用–merged和–no-merged查看已经合并、未合并的分支。

创建及切换分支

可以使用下面命令直接切换并创建分支
git checkout -b testing
等价于

$ git branch testing    # 创建testing 分支
$ git checkout testing  # 切换到testing分支

注意切换分支时请保持工作目录没有未提交的修改。Git鼓励使用分支,处理完问题之后合并分支即可。

分支合并

将hotfix分支合并到master(主分支)上,需要通过下面命令:

$ git checkout master
$ git merge hotfix

合并之后可以使用
git branch -d hotfix
删除分支。
如果合并时存在冲突,需要手工修改。

10.Git回滚操作


附录:一些博客链接

直接跳转原地址看吧:
返回主页 Tocy–Git命令行基本操作

另外有个地方的博客看到感觉不多,Git板块:
玩转 Git - 毕小烦的学习笔记

或者看看下方教程:
廖雪峰–Git教程

pull与fetch命令的区别:
Git 少用 Pull 多用 Fetch 和 Merge
git fetch和git pull之间的区别

Git的命令列表,各种命令,包括版本回滚等:
Git常用命令 - Vman - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值