当前位置:   article > 正文

git使用方法指令整理

git使用方法指令整理

@author: 10pi(我自己)
@version: 更新到Pull Request之前的内容
@source: 谷歌“用Python进行IT自动化办公”Git部分
只是为了方便自己用到时查阅而顺手发上来,如有错误(估计有很多错误)还请多多指教。

涉及到的内容举例

本地标准工作流:修改-暂存-提交(modify, stage and commit)
远程标准工作流:pull-modify-push
常用指令:git init
git add
git commit -a -m "message"
git checkout
git branch
git push
git pull

标准工作流

初始化

git init track the history of the current directory
(Just like bought a safe, but haven’t put anything in it, using add function)

mkdir check
cd check
git init
  • 1
  • 2
  • 3

!标准工作流修改-暂存-提交

标准工作流: modify, stage and commit

# 1. (first make or modify some files, example.py for example)

# 2. use add to stage all the modified files
git add example.py

# 3. commit all the staged files
git commit -m 'Do some modification.'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在每一步中,还可以使用 git status 命令查看当前状态,如有文件被修改但尚未被提交、以及暂存区当前的文件状态等。
另外还有 git config 命令可以修改user.emailuser.name等,可以利用 git config -l查看所有配置项。

提交

git commit

设定提交信息 -m
git commit -a -m 'Do something.'

跳过暂存区 -a
git commit -a 快捷地将被跟踪文件的更改暂存并提交

显示详细信息

git log相关的指令

详细更改信息 -p
git log -p 显示含diff的详细提交信息(patch)
可以用D和U键进行Page Down和Page Up,Q键退出。

统计信息 --stat

查看条数 -<number>
git log -2查看最近两条

用commit ID查看信息
git show <commit ID>
commit ID为40位长度的hash,也可以把4-8位的开头拿给git猜,唯一就行。

查看更改内容
git diff
查看当前被modify但尚未stage的文件内容情况。
另外可以添加文件名参数以指定特定文件,
也可以添加--staged以查看被stage的文件情况。

显示更改并询问
git add -p
显示更改,询问是否stage被更改的文件

与合并相关的指令
git log --graph
可视化分歧与合并

git log --oneline
每次commit只显示一行

删除、重命名

删除
git rm <filename>
删除文件(存到暂存区),然后commit一下就删掉了

重命名
git mv <filename> <new filename>
重命名文件(存到暂存区),然后commit一下就改掉了

忽略文件
.gitignore 文件
初始化过程:
echo .DS_STORE > .gitignore 创建.gitignore文件,并忽略.DS_STORE文件
git add .gitignore
git commit -m 'Added a .gitignore file, ignoring .DS_STORE file'

回顾:. 开头的文件会被隐藏,需要用 ls -la 来查看

撤回

修改之后、尚未暂存时撤回/撤回modify
(在已经modify、尚未stage时)
git checkout
将全部内容撤销回上次commit过的状态
git checkout -p
逐一询问每项更改是否撤销回上次commit过的状态

已经暂存时撤回/撤回stage
git reset HEAD <filename>
被reset之后的文件不再被stage,相当于add的逆过程
同样可以加-p以逐一询问

修改commit
git commit --amend
将stage的内容commit掉,并更改最近的一次commit
(其效果是打开编辑器、编辑最近一次commit的信息;此时的stage区包含最近一次stage、以及从最近一次commit到本次commit过程中新stage的两部分内容;之后将这些信息覆盖到最近的一次commit上;commit ID会因此改变)

Avoid amending commits that have already been made public, since it changes commit ID.
不要对公共提交使用--amend,因为会改变commit ID。

已经提交时撤回/回滚commit
git revert HEAD
创建新commit,以撤销最近一次commit的所有更改(如增行被减掉、改行被改回)。
因为创建了新commit,所以会打开编辑器,并包含最近一次commit的内容,以及自动增加回滚相关的信息。
(建议在message中除了自动添加的内容,加入reason for rollback)
ps. 注意区别git revert HEADgit commit --amend:前者会将原commit和新创建的逆操作commit两者都保留在git log中,而后者是直接在原commit上做更改、且会修改原commit的commit ID。

git revert <commit ID>
回滚特定某一次commit的操作,不一定是最近一次。
注意理解:回滚的本质是创建一个新的commit,这个commit包含且仅包含我们需要回滚的那一次commit的信息以及所有操作的逆操作,因此这中间的所有commit的操作得以保留。
(所以回滚的机制并不是直接把之前备份的文件拿来用,这就是rollback相比于备份的优点)

还原某个文件
git checkout -- [file]
This next command is useful if you would like to actually undo your work. Let’s say that you have modified a certain file since committing previously, but you would like your file back to how it was before your modifications.

Note: This command is potentially quite dangerous because any changes you made to the file since your last commit will be removed. Use this with caution!

使用例:撤回某一特定文件

省流:git checkout master -- <file>

如果不小心误操作(比如rm -rf 文件名,此时git pull发现还是up to date)导致删除了某一特定文件(在git status里看到是deleted),
此时关键问题在于我们pull的版本指向的HEAD的号码恰好等于我们发生改变的号码,所以pull并不会认为二者有分歧。

解决办法:
首先git add将其添加,
然后git commit把这个没有文件的情况交上去,
git checkout 某个有该文件的号码 -- 文件名
git commit上去,
即可找回该文件。

寻找有合适文件的号码时可以用 git checkout 各个号码 翻翻看,但此时是detached HEAD状态,不位于主分支,只应该看、而不应该做出任何修改。要做修改,建议:
git checkout master 回到主分支,
再使用上述的git checkout 某个有该文件的号码 -- 文件名并且git commit的方式。

省流总结
回滚某一文件的步骤

  1. git checkout 号码 找到合适版本并记下号码
  2. git checkout master 回到主分支
  3. git checkout 号码 -- <filename> 回滚某一文件

分支

各个分支可以互不干扰地进行,如在某个分支做新功能的同时在主分支修复bug并发布、之后继续在新分支做新功能,或者在同一代码树中发布包含稳定版本和测试版本在内的多个版本。

查看分支
git branch

创建新分支
git branch <branch name>

切换到某分支
git checkout <branch name>

创建并切换到新分支
git checkout -b <branch name>
相当于git branch <branch name>git checkout <branch name>的简写。

如在master分支基础上创建test分支,
在test分支下进行commit的git log不会在切换到master分支后显示,
利用ls -l查看master分支下的文件,也不会显示test分支中新创建的文件。

Each branch is just a pointer to a specific commit in a series of snapshots.

删除分支
git branch -d <branch name>
如果分支中有未合并的功能,会提示需要用git branch -D <branch name>删除。

合并分支
git checkout master
git merge <branch name>
使master分支与最新状态保持一致。
如果master分支与当前checkout的分支的commit历史有继承关系,则直接合并;
如果合并有分歧,
如在新分支和master分支都做了一些改变并都完成了commit,则git会提示合并错误(可通过git status查看),并在相应的文件中用>>>标明冲突部分供选择处理。
使用git add <filename>命令重新暂存待合并的文件以表明处理完毕,然后git commit

放弃合并
git merge --abort

github

远程标准工作流:pull, merge and push
modify在pull前或pull后均可进行。

ps. 与视频不同的是,现在github的主分支默认值从master变为main(可在settings中自行修改),且账号密码校验改成了账号令牌(token)校验。

从远程仓库获取
git clone <URL>

将本地更改推送到远程仓库
git commit (如git commit -a -m 'Some message here'
git push
(关于密码:可用SSH并把公钥存在电脑配置文件里,
也可用git config --global credential.helper cache以达到自动缓存15分钟的效果。

查看当前与远程仓库关联的URL
git remote -v

获取与远程仓库相关的更多信息
例:此处远程仓库名为origin
git remote show origin

查看正在跟踪的远程仓库
git branch -r

从远程仓库更新本地远程分支
git pull

远程仓库的origin/master对应于本地仓库的master。

也可用:
git fetchgit remote update
git merge origin/master
先取回(从remote repo到remote branch)再合并,效果与git pull相同。

在远程仓库创建并推送新分支
git push -u origin experimental

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/638347
推荐阅读
相关标签
  

闽ICP备14008679号