git bash
中可以使用linux命令来操作windows系统
官网下载git
yum install git
右键目录+s
可以快速打开bash
SUMMARY OF LESS COMMANDS
Commands marked with * may be preceded by a number, N.
Notes in parentheses indicate the behavior if N is given.
A key preceded by a caret indicates the Ctrl key; thus ^K is ctrl-K.
h H Display this help.
q :q Q :Q ZZ Exit.
---------------------------------------------------------------------------
MOVING
e ^E j ^N CR * Forward one line (or N lines).
y ^Y k ^K ^P * Backward one line (or N lines).
f ^F ^V SPACE * Forward one window (or N lines).
b ^B ESC-v * Backward one window (or N lines).
z * Forward one window (and set window to N).
w * Backward one window (and set window to N).
ESC-SPACE * Forward one window, but don't stop at end-of-file.
d ^D * Forward one half-window (and set half-window to N).
u ^U * Backward one half-window (and set half-window to N).
ESC-) RightArrow * Right one half screen width (or N positions).
ESC-( LeftArrow * Left one half screen width (or N positions).
ESC-} ^RightArrow Right to last column displayed.
ESC-{ ^LeftArrow Left to first column.
F Forward forever; like "tail -f".
ESC-F Like F but stop when search pattern is found.
r ^R ^L Repaint screen.
R Repaint screen, discarding buffered input.
---------------------------------------------------
Default "window" is the screen height.
Default "half-window" is half of the screen height.
---------------------------------------------------------------------------
SEARCHING
/pattern * Search forward for (N-th) matching line.
?pattern * Search backward for (N-th) matching line.
n * Repeat previous search (for N-th occurrence).
N * Repeat previous search in reverse direction.
ESC-n * Repeat previous search, spanning files.
ESC-N * Repeat previous search, reverse dir. & spanning files.
ESC-u Undo (toggle) search highlighting.
&pattern * Display only matching lines
---------------------------------------------------
A search pattern may begin with one or more of:
^N or ! Search for NON-matching lines.
^E or * Search multiple files (pass thru END OF FILE).
^F or @ Start search at FIRST file (for /) or last file (for ?).
^K Highlight matches, but don't move (KEEP position).
^R Don't use REGULAR EXPRESSIONS.
---------------------------------------------------------------------------
JUMPING
g < ESC-< * Go to first line in file (or line N).
G > ESC-> * Go to last line in file (or line N).
p % * Go to beginning of file (or N percent into file).
t * Go to the (N-th) next tag.
T * Go to the (N-th) previous tag.
{ ( [ * Find close bracket } ) ].
} ) ] * Find open bracket { ( [.
ESC-^F * Find close bracket .
ESC-^B * Find open bracket
---------------------------------------------------
Each "find close bracket" command goes forward to the close bracket
matching the (N-th) open bracket in the top line.
Each "find open bracket" command goes backward to the open bracket
matching the (N-th) close bracket in the bottom line.
m Mark the current top line with .
M Mark the current bottom line with .
' <letter> Go to a previously marked position.
'' Go to the previous position.
^X^X Same as '.
ESC-M Clear a mark.
---------------------------------------------------
A mark is any upper-case or lower-case letter.
Certain marks are predefined:
^ means beginning of the file
$ means end of the file
---------------------------------------------------------------------------
CHANGING FILES
:e [file] Examine a new file.
^X^V Same as :e.
:n * Examine the (N-th) next file from the command line.
:p * Examine the (N-th) previous file from the command line.
:x * Examine the first (or N-th) file from the command line.
:d Delete the current file from the command line list.
= ^G :f Print current file name.
---------------------------------------------------------------------------
MISCELLANEOUS COMMANDS
- Toggle a command line option [see OPTIONS below].
-- Toggle a command line option, by name.
_ Display the setting of a command line option.
__ Display the setting of an option, by name.
+cmd Execute the less cmd each time a new file is examined.
!command Execute the shell command with $SHELL.
|Xcommand Pipe file between current pos & mark X to shell command.
s file Save input to a file.
v Edit the current file with $VISUAL or $EDITOR.
V Print version number of "less".
---------------------------------------------------------------------------
OPTIONS
Most options may be changed either on the command line,
or from within less by using the - or -- command.
Options may be given in one of two forms: either a single
character preceded by a -, or a name preceded by --.
-? ........ --help
Display help (from command line).
-a ........ --search-skip-screen
Search skips current screen.
-A ........ --SEARCH-SKIP-SCREEN
Search starts just after target line.
-b [N] .... --buffers=[N]
Number of buffers.
-B ........ --auto-buffers
Don' t automatically allocate buffers for pipes.
-c ........ --clear-screen
Repaint by clearing rather than scrolling.
-d ........ --dumb
Dumb terminal.
-D [xn.n] . --color=xn.n
Set screen colors. (MS-DOS only)
-e -E .... --quit-at-eof --QUIT-AT-EOF
Quit at end of file.
-f ........ --force
Force open non-regular files.
-F ........ --quit-if-one-screen
Quit if entire file fits on first screen.
-g ........ --hilite-search
Highlight only last match for searches.
-G ........ --HILITE-SEARCH
Don't highlight any matches for searches.
-h [N] .... --max-back-scroll=[N]
Backward scroll limit.
-i ........ --ignore-case
Ignore case in searches that do not contain uppercase.
-I ........ --IGNORE-CASE
Ignore case in all searches.
-j [N] .... --jump-target=[N]
Screen position of target lines.
-J ........ --status-column
Display a status column at left edge of screen.
-k [file] . --lesskey-file=[file]
Use a lesskey file.
-K ........ --quit-on-intr
Exit less in response to ctrl-C.
-L ........ --no-lessopen
Ignore the LESSOPEN environment variable.
-m -M .... --long-prompt --LONG-PROMPT
Set prompt style.
-n -N .... --line-numbers --LINE-NUMBERS
Don't use line numbers.
-o [file] . --log-file=[file]
Copy to log file (standard input only).
-O [file] . --LOG-FILE=[file]
Copy to log file (unconditionally overwrite).
-p [pattern] --pattern=[pattern]
Start at pattern (from command line).
-P [prompt] --prompt=[prompt]
Define new prompt.
-q -Q .... --quiet --QUIET --silent --SILENT
Quiet the terminal bell.
-r -R .... --raw-control-chars --RAW-CONTROL-CHARS
-s ........ --squeeze-blank-lines
Squeeze multiple blank lines.
-S ........ --chop-long-lines
Chop (truncate) long lines rather than wrapping.
-t [tag] .. --tag=[tag]
Find a tag.
-T [tagsfile] --tag-file=[tagsfile]
Use an alternate tags file.
-u -U .... --underline-special --UNDERLINE-SPECIAL
Change handling of backspaces.
-V ........ --version
Display the version number of "less".
-w ........ --hilite-unread
Highlight first new line after forward-screen.
-W ........ --HILITE-UNREAD
Highlight first new line after any forward movement.
-x [N[,...]] --tabs=[N[,...]]
Set tab stops.
-X ........ --no-init
Don't use termcap init/deinit strings.
-y [N] .... --max-forw-scroll=[N]
Forward scroll limit.
-z [N] .... --window=[N]
Set size of window.
-" [c[c]] . --quotes=[c[c]]
Set shell quote characters.
-~ ........ --tilde
Don't display tildes after end of file.
-# [N] .... --shift=[N]
Horizontal scroll amount (0 = one half screen width)
--follow-name
The F command changes files if the input file is renamed.
--mouse
Enable mouse input.
--no-keypad
Don't send termcap keypad init/deinit strings.
--no-histdups
Remove duplicates from command history.
--rscroll=C
Set the character used to mark truncated lines.
--save-marks
Retain marks across invocations of less.
--use-backslash
Subsequent options use backslash as escape char.
--wheel-lines=N
Each click of the mouse wheel moves N lines.
---------------------------------------------------------------------------
LINE EDITING
These keys can be used to edit text being entered
on the "command line" at the bottom of the screen.
RightArrow ..................... ESC-l ... Move cursor right one character.
LeftArrow ...................... ESC-h ... Move cursor left one character.
ctrl-RightArrow ESC-RightArrow ESC-w ... Move cursor right one word.
ctrl-LeftArrow ESC-LeftArrow ESC-b ... Move cursor left one word.
HOME ........................... ESC-0 ... Move cursor to start of line.
END ............................ ESC-$ ... Move cursor to end of line.
BACKSPACE ................................ Delete char to left of cursor.
DELETE ......................... ESC-x ... Delete char under cursor.
ctrl-BACKSPACE ESC-BACKSPACE ........... Delete word to left of cursor.
ctrl-DELETE .... ESC-DELETE .... ESC-X ... Delete word under cursor.
ctrl-U ......... ESC (MS-DOS only) ....... Delete entire line.
UpArrow ........................ ESC-k ... Retrieve previous command line.
DownArrow ...................... ESC-j ... Retrieve next command line.
TAB ...................................... Complete filename & cycle.
SHIFT-TAB ...................... ESC-TAB Complete filename & reverse cycle.
ctrl-L ................................... Complete filename, list all.
---------------------------------------------------------------------------
项目内执行过的
git
命令是没法查看的,不存在git history
命令
start a working area (see also: git help tutorial)
clone Clone a repository into a new directory
init Create an empty Git repository or reinitialize an existing one
work on the current change (see also: git help everyday)
add Add file contents to the index
mv Move or rename a file, a directory, or a symlink
restore Restore working tree files
rm Remove files from the working tree and from the index
examine the history and state (see also: git help revisions)
bisect Use binary search to find the commit that introduced a bug
diff Show changes between commits, commit and working tree, etc
grep Print lines matching a pattern
log Show commit logs
show Show various types of objects
status Show the working tree status
grow, mark and tweak your common history
branch List, create, or delete branches
commit Record changes to the repository
merge Join two or more development histories together
rebase Reapply commits on top of another base tip
reset Reset current HEAD to the specified state
switch Switch branches
tag Create, list, delete or verify a tag object signed with GPG
collaborate (see also: git help workflows)
fetch Download objects and refs from another repository
pull Fetch from and integrate with another repository or a local branch
push Update remote refs along with associated objects
只有推送
push
会影响远端分支,其他所有操作都是影响当前分支head
,不会影响别的分支
克隆/新建(clone):从远端仓库URL加载创建一个与远端仓库一样的本地版本库。
提交(commit):将暂存区文件上传到本地代码仓库(提交的是对文件的修改操作,而不是当前工作区的文件)
推送(push):将本地版本库同步至远端仓库,一般推送(push)前先拉取(pull)一次,确保一致(十分注意:这样你才能达到和别人最新代码同步的状态,同时也能够规避很多不必要的问题)。
拉取(pull):从远端仓库获取信息并同步至本地版本库,并且自动执行合并(merge)操作(默认git pull=git fetch+git merge)。
获取(fetch):从远端仓库获取信息并同步至本地版本库。
分支(branch):创建/修改/删除分枝。
合并(merge):将多个同名文件合并为一个文件,该文件包含多个同名文件的所有内容,相同内容抵消。
贮藏(git stash):保存工作现场。
丢弃(Discard):丢弃更改,恢复文件改动/重置所有改动,即将已暂存的文件丢回未暂存的文件。
标签(tag):给项目增添标签。
工作流(Git Flow):团队工作时,每个人创建属于自己的分枝(branch),确定无误后提交到master分支。
终端(terminal):可以输入git命令行。
每次拉取和推送的时候不用每次输入密码的命令行:git config credential.helper osxkeychain sourcetree。
检出(checkout):切换不同分支。
添加(add):添加文件到缓存区。
移除(remove):移除文件至缓存区。
重置(reset):回到最近添加(add)/提交(commit)状态。
暂存区存储的是要提交的文件,可以通过
ls-files
查看暂存区内的文件
查看工作区内可以放入暂存区的内容
git status #会显示所有可以放入暂存区的内容(暂存区的内容记录在ls-files内)
git status -s #更直观的查看暂存区状态
# ?表示未跟踪,M表示已修改modified,A表示当前添加到了暂存区
# 红色:不在暂存区ls-files
# 绿色:在暂存区
git config --global core.quotepath false
提交commit、暂存add
的都是对文件的修改操作,而不是本地的文件
放入暂存区内的文件,才是被跟踪的文件,文件被提交后,会记录在
ls-files
内,如果文件在暂存区列表ls-files
中被删掉rm
,则文件又会变为未被跟踪untracked
状态,未被跟踪相当于新文件
git status # 查看工作区内可以提交到暂存区的文件
git add . #把所有修改操作都放入暂存区ls-files #把git status内可以放入的文件都放入暂存区
git add ggg/ppp/ttt.txt #添加指定文件的修改操作放入暂存区
#重置为未跟踪状态,不进行git管理,但保留工作区文件
git rm --cached ggg/ppp/ttt.txt
add
的逆操作git restore --staged ggg/ppp/ttt.txt #从暂存区内移除修改操作,工作区内保留 #是add的逆操作
暂存区文件列表
ls-files
,记录了所有被跟踪的文件,即所有被git管理的文件,在ls-files
的文件,之后会被推送到远端仓库未跟踪的文件,通过
add
保存到暂存区,此时被git管理,记录在ls-files
内通过删除
rm --cached
或rm
可以删除ls-files
内的文件,让文件不被git管理,文件会变成未跟踪状态untracked
,不会被推送到远端仓库
git ls-files #查看当前暂存区的文件列表(之后会被提交为新版本)
git ls-files|grep xxx #在暂存区内查找指定文件
rm 文件 # 只操作工作区
git rm 文件相对路径 #同时操作暂存区和工作区
git rm --cached 文件相对路径 #只操作暂存区,删除暂存区ls-files的文件,让其变为未跟踪状态
#删完暂存区的文件,再push就能删除远端的文件了
git rm -rf --cached ggg/ # 递归删除目录
如果要删除当前版本的文件
rm --cached
即可,文件变为untracked
状态rm
即可如果工作区的文件有修改,但未暂存该版本,此时,需要强制删除git rm -f
如果要递归删除目录内的所有内容,此时需要用到git rm -r
,递归强制删除git rm -rf
如果a.txt
已跟踪(在暂存区内ls-files
),a.txt
现在要重命名为b.txt
git mv a.txt b.txt #会在暂存区、工作区同时修改文件名 #移动文件或重命名文件
git mv amssji.txt ggg/amppp.txt
等价于
mv a.txt b.txt #重命名或移动文件a到b
git rm --cached a.txt # 只在暂存区删除旧文件a
git add b.txt #新文件名b
sourcetree
,重命名文件后,可以直接自动生成对应的rm
和add
命令,暂存后直接提交即可
提交commit、暂存add
的都是对文件的修改操作,而不是本地的文件
只有被git
管理(跟踪)的文件才会被提交到远端仓库和版本库
git commit -m 'xxxx' # -m 直接写提交注释
只要文件已经在暂存区内
ls-files
(已跟踪),修改文件后,就可以用commit -am
直接提交文件,跳过add
操作
git commit -m '新版本开始' --allow-empty
git log --oneline #查看当前分支日志
git log --oneline --graph --all #查看所有分支,包括远端分支日志
git log -3 #查看最近的3条日志
git log --oneline --graph -3
git log --stat -2 #查看版本对应修改的文件列表
git log --oneline --stat --all --graph -5
当前内容是
+++
,即最新内容
git不会检查gitignore规则匹配的指定文件,不会提示要跟踪这些文件,这些文件始终保持
untraced
未跟踪状态
glob模式是shell简化了的正则表达式
reset
可以回滚到任意分支的任意指定版本(不单只是当前结点的历史版本)
reset
不会产生冲突
#工作区不变
git reset --soft 版本号 #软合并,工作区不变,到指定版本的修改操作被保存到了暂存区
git reset --mixed 版本号 #混合合并,工作区不变,到指定版本的修改操作被记录,但没放到暂存区
#重置工作区
git reset --hard 版本号 #硬合并,工作区变成指定版本的状态,丢弃修改操作
硬合并,工作区变成指定版本的状态,丢弃修改操作
git reset --hard 版本号 #硬合并,丢弃修改操作
混合合并,工作区不变,到指定版本的修改操作被记录,但没放到暂存区
如果丢弃修改操作,就等价于--hard
git reset --mixed 版本号 #混合合并,修改操作回到工作区
git reset
默认使用软合并
软合并,工作区不变,到指定版本的修改操作被保存到了暂存区
如果丢弃修改操作,就等价于--hard
git reset --soft 版本号 #软合并,修改操作回到暂存区
log
是查看所有版本历史commit id
reflog
是head
指针的移动日志,即head
指针的commit id
移动路径
reflog
不会记录push
操作,因为push
操作不会使得head
指针发生移动,因此无法回滚push
操作git reflog -3 #查看最近的3条head指针移动日志
add, pull, rm
,但影响远端仓库的操作push
无法回滚使用log
无法查看回滚后的版本记录commit id
(但是可以通过reflog
查看到所有历史版本记录commit id
)
使用reflog
查看head
指针的历史移动轨迹,有对应的历史commit id
,可以通过这些历史commit id
,通过reset+branch
找回分支的历史版本
git pull origin test #拉取远端origin/test到当前本地分支
git pull --set-upstream origin test #拉取远端origin/test到本地仓库,并设置跟踪关系,可以使用origin简写
建议先
fetch
获取远端仓库的log
日志(不会改动当前版本head
)
git fetch 就是把远端仓库的日志log
拉取下来,不会改变工作区,不会改变当前版本head
git pull 会更新工作区的代码,默认是fetch+merge
操作,有合并冲突就必须手动处理冲突,合并后,当前版本head
移动到合并后的新节点位置
默认更新方式:git merge origin/master
,把分叉点后origin/master
的修改操作以新结点方式追加到当前分支后
git pull --rebase origin #推荐拉取方式
可以把当前版本所有已跟踪但未提交的修改操作都贮藏起来,
重置工作区的所有已跟踪文件
为未修改状态
git stash #存储工作区内已跟踪文件的修改操作
git stash save 'development' #存储工作区并添加备注内容
git stash list #查看已贮藏区列表
git stash apply stash@{1} #应用最新git贮藏的内容(应用后不删除该贮藏)
git stash pop stash@{1} #应用最新贮藏的内容(应用后该贮藏的内容会被删除!)
git stash drop stash@{1} #删除最新贮藏的内容
git stash show stash@{1} #查看指定贮藏内容用于当前工作区后的效果
git stash clear #删除所有贮藏内容
git config --global -l
ssh-keygen -t rsa -C "[email protected]"
cat ~/.ssh/id_rsa.pub #这也是默认的ssh公钥文件位置
默认的ssh公钥文件位置:
gitee
,gitea
等添加本地生成的ssh公钥类似
可以克隆远端分支到任意指定目录下
如果是ssh方式克隆,需要在远端仓库配置本地生成的
ssh公钥
(用git工具还需要把ssh公钥
配置到git工具内)
如果是http方式克隆,则直接克隆即可
克隆后,可以通过
config
配置项目专有的开发者身份标识,可以使用config --local
查看开发者身份标识
github
创建空的远端仓库本地默认的ssh公钥路径为`~/.ssh/id_rsa.pub
然后根据本地的情况选择对应的代码同步方案:
git clone 远端仓库链接 # 在当前项目内创建项目目录
origin
,进行开发git init # 使用git管理本地项目
git remote add origin 远端仓库链接 #设置远端仓库地址
或者先克隆远端项目clone
,再把已有代码粘贴过去
最后,要推送的代码放到暂存区add
,再推送代码git push origin
即可
如果是fork
别人的远端仓库,push
到远端后,再创建合并请求pull request
即可
设定用户和邮箱来区别不同的开发者
git config --global -l #查看配置
git config --global user.name "xxx" #设置提交用户名标识
git config --global user.email "[email protected]" #设置提交用户的邮箱标识
git config -list
git config --local -l #查看配置
git config user.name xxxx
git config user.email [email protected]
cat .git/config
git config -e #修改本地项目配置 #等价于 git config --local -e
git config --global -e #修改全局项目配置
可以使用
config -e
设置远端仓库地址
克隆项目后,配置内本地
master
分支跟踪的是远端的origin/master
分支
push origin
简写,只能pull origin
简写git push -u origin test #推送到远端origin/test,并设置跟踪关系,即origin等价于origin test:test
#等价于
git push --set-upstream origin test
git pull --set-upstream origin test #拉取远端origin/test到本地分支ppp,并设置跟踪关系
git push origin master:dev #本地分支master到远端origin/dev #写全要推送的远端分支 #如果远端没有该分支,就创建分支
git push origin
# 如果有跟踪关系,则可以使用origin简写
# 如果没有跟踪,则需要配置跟踪关系,否则必须写全远端分支
git push -u origin test #推送到远端origin/test,并设置跟踪关系,之后可以使用origin简写 #必须推送到已有分支
#等价于
git push --set-upstream origin test
可以修改config
来修改远端分支跟踪关系test.merge
和远端仓库地址origin.url
git config -e # 修改本地项目配置
注意:对远端仓库的推送操作
push
,无法通过reflog
回滚
git push -f origin # -f 等价于 --force
对远端分支的所有操作,都是先在本地操作后,再推送
push
到远端仓库来实现的
这种是安全的回滚方式
git checkout -b merge 62bc
git reset --soft 20b2
git commit -am '回退到旧版本'
git push origin merge:dev
不安全的回滚远端分支方式
强制推送,让本地分支强制覆盖远端分支,日志和内容都会被覆盖
不要随意用这种方式修改远端分支的提交历史,因为别人也在使用拉取的远端历史记录
操作不可逆,
push --force
会修改日志reflog
强制推送可以用于修改日志的路线
先回滚本地分支reset
,再通过push --force origin
强制覆盖远端分支,实现远端分支的版本回滚
git checkout -b merge
git reset --hard 0b24
git push --force origin merge:dev
别人远端仓库
的指定远端分支合并自己远端仓库
的指定远端分支rebase
和merge
merge
origin/test
的操作放到origin/master
的末尾在别人的仓库发起合并请求
注意:删除远端分支不可逆,无法恢复
git push --delete origin dev #删除远端'origin/dev'分支
git branch # 查看本地分支名称
git branch -a # 查看本地和远端分支名
git branch -av # 查看本地和远端分支名+当前版本号origin/head+注释
branch
的用法:
*
表示)在当前分支节点
head
基础上,创建新分支(生成当前结点head
的快照)
dev
分支并跟踪指定远端origin/test
分支
origin
进行任何操作,必须写全远端分支,如git push origin ppp:ppp
git branch dev origin/dev # 创建dev分支,dev跟踪origin/dev
git branch dev # 创建dev分支,默认dev没有跟踪任何远端分支,即分支dev无法使用origin
-D
git branch -D dev #强制删除'dev'分支
一旦
checkout
到指定分支上,则在该分支上进行的任何操作,只会影响自己,不会影响别的分支(变的只是当前所在的分支,别的分支不变)
checkout
的两种用法:
checkout
checkout -b
checkout -b
指定了跟踪关系,则分支和远端分支同步,和当前分支无关可以检出远端分支内容,但创建分支后,无跟踪远端分支,需要写全远端分支
git checkout -b tb origin/dev a485
创建后的分支和跟踪的分支同步,而不是在当前分支的接触上创建分支
git checkout -b tt origin/test
如果checkout
发生冲突,说明工作区或暂存区有文件内容冲突
git -c diff.mnemonicprefix=false -c core.quotepath=false --no-optional-locks checkout poster --progress
error: The following untracked working tree files would be overwritten by checkout:
README.md
Please move or remove them before you switch branches.
Aborting
#查看远端分支
git branch -r
#签出远端分支warning_test到本地分支test上
git checkout -b test origin/warning_test
合并后
git merge
,会留下合并的痕迹,即使合并的分支被删掉,合并的痕迹一定会保留下来
合并后,不想留合并痕迹可以使用git merge --squash
必须确保future操作不能在master分支操作前面,因此只能追加到末尾
master
上git merge future
,和future
上git merge master
的结果结点顺序不同,正确顺序是master
上git merge future
merge
和rebase
#rebase如果在
master
分支上,则使用merge
整合到master
分支
如果在future
分支上,则使用rebase
整合到master
master
分支上,不能去rebase
其他分支,否则会导致操作顺序问题,即要保证新功能是后追加的
merge
后会留下合并的轨迹,可以看出是哪些分支参与了开发rebase
后,看起来好像始终只有一个分支在开发,不会留下rebase
的痕迹merge
留下痕迹,可以使用git merge --squash
冲突只能通过手动处理,在有冲突的区域,编写最终版本
最终版本写什么都行,只要把<<和
>>>test
去掉就表示冲突已解决
比较的都是已跟踪文件(被git管理的文件)
ls-files
就是比较工作区和暂存区
ls-files
的文件内容差异
ls-files
的文件列表可以理解为待提交的内容,提交了就是下一版本
git status
,使用git diff
可以详细查看哪些文件内容有差异ls-files
和指定版本 #cached #staged比较不同
commit id
的区别
stash
可以一次性放弃所有文件的修改操作,且可以恢复修改操作
restore
每次只能放弃对一个文件的修改操作,但无法恢复修改操作
git restore --staged 文件路径 #暂存区丢弃对文件的修改,工作区保留修改,是add的逆操作
git restore 文件路径 # 工作区丢弃对文件的修改(修改操作丢失)
git stash #贮藏所有修改操作
rebase变基即把当前分支的基点(
分叉点
)后所有操作,迁移到指定分支的末尾进行,不会生成新结点
必须确保
master
分支操作在future
分支操作前面,因此只能迁移future
分支操作到master
分支操作末尾
rebase
对指定的分支无影响,对当前分支有影响
如果变基过程中发生冲突,则解决冲突后,继续变基,直到变基完成
如果使用
ssh
协议连接远端仓库,则需要先在sourceTree
和远端仓库中配置ssh
公钥public key
即git merge origin/master
,修改操作追加到当前分支末尾,本地修改可能被覆盖
即git rebase origin/master
,本地操作不会被覆盖
先rebase更新本地版本库,再推送到远端分支(推荐)
对于本地分支,
检出checkout
就是切换当前本地分支(双击切换)
对于远端分支,检出checkout
就是把远端的指定分支克隆
到本地版本库(右键checkout
)
对应指令
git checkout -b tt origin/develop
新建分支,即克隆当前分支
合并分支,不会影响别的分支内容,只会改变当前分支
冲突只能手动解决,对有冲突的区域,选择最终要保留的代码
在工作区内,有冲突的文件会处于未暂存
状态,对文件内的冲突代码进行修改,确定最终版本