赞
踩
@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
!标准工作流:修改-暂存-提交
标准工作流: 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.'
在每一步中,还可以使用 git status
命令查看当前状态,如有文件被修改但尚未被提交、以及暂存区当前的文件状态等。
另外还有 git config
命令可以修改user.email
和user.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 HEAD
和git 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
的方式。
省流总结:
回滚某一文件的步骤:
git checkout 号码
找到合适版本并记下号码git checkout master
回到主分支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
远程标准工作流: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 fetch
或git remote update
git merge origin/master
先取回(从remote repo到remote branch)再合并,效果与git pull
相同。
在远程仓库创建并推送新分支
git push -u origin experimental
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。