目录 start
目录 end
|2018-04-15| 码云 | CSDN | OSChina
git pull 对方的分支
git checkout 自己的分支
git merge --no-ff 对方的分支
git push (自己的源+分支)origin master
cat ~/.ssh/id_rsa.pub | xclip -sel clip
复制公钥git config core.fileMode false
git config --global core.quotepath false
即可Windows下记住密码
:
%USERPROFILE%
_netrc
文本文件:
machine https://github.com/Kuangcp/
login ***
password ***
Linux下记住密码
:(如果使用了多个github账号,设置这个后只能使用一个账号的自动登录,另一个账号将完全连不上github,ssh也只能一个账号配一个,不能多个账号用一个ssh)
touch .git-credentials
vim .git-credentials
http://{username}:{password}@github.com
或者是https开头git config --global credential.helper store
~/.gitconfig
文件中多了以下内容即可
ssh 方法:(推荐)
ssh-keygen
不设置密码cat ~/.ssh/id_rsa.pub | xclip -sel clip
添加即可MIT
简单宽松的许可证,任何人可以拿代码做任何事与我无关eg: jQuery、Rails
Apache
关注于专利,这类似于MIT许可证,但它同时还包含了贡献者向用户提供专利授权相关的条款。 Apache、SVN和NuGet
GPL
关注于共享改进,这是一种copyleft许可证,要求修改项目代码的用户再次分发源码或二进制代码时,必须公布他的相关修改。 Linux、Git
sudo apt-get install git
安装最新版本
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get install software-properties-common
sudo apt update
sudo apt install git
Github下拉到eclipse
本地已有代码关联远程空仓库
git remote add origin https://github.com/Kuangcp/StudentManager.git
git push -u origin master
git push -u 随便 随意
建立本地空仓库并关联到远程仓库
mkdir 库名
创建一个文件夹,最好和远程的库同名Git Bash
git init
初始化(建立 .git
目录)touch README.md
git remote add origin master URL
连上远程仓库git push -u origin master
输入用户名,密码 (若因为没有上游节点就按提示输入命令建立初始节点即可 git push --setupstream origin master)git branch --set-upstream dev origin/dev
master同理方便学习使用
git clone URL
复制下来,默认是mastergit branch 新分支名
新建一个分支,切换过去,使用的就是这个新分支放代码git push origin 新分支名
add commit 之后就pushgit fetch origin 已有分支
下拉别的分支代码 git config --global user.name " "
git config --global user.email " "
git config --global color.ui auto
如果是多个账号使用同一台电脑就不要配置这个,单独配置每个仓库下的用户名,邮箱即可
git config user.name ""
如果要输入解释的话就需要:
1.按键盘字母 i 进入insert模式
2.修改最上面那行黄色合并信息,可以不修改
3.按键盘左上角"Esc"
4.输入`:wq`,按回车键即可 或者 :x
其他平台类似
1.首先fork一个项目, 然后clone自己所属的该项目下来,假设原作者A自己为B
2.进入项目目录,添加原作者项目的URL到该项目的远程分支列表中git add remote A A_URL
3.fetch源到本地git fetch A
4.合并两个分支代码git merge --no-ff A/master
5.push即可
#
注释一行test.txt
忽略该文件*.html
忽略所有HTML文件*[o/a]
忽略所有o和a后缀的文件!foo.html
不忽略该文件示例文件
# maven #
target/
# IDEA #
.idea/
*.iml
out/
# eclipse #
bin/
.settings/
.metadata/
.classpath
.project
Servers/
使用 .git-prompt.sh 在Bash下显示当前分支 Windows环境不用看,安装的Git-for-windows软件已经会显示分支名了
wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh -O ~/.git-prompt.sh
下载脚本chmod +x ~/.git-prompt.sh
赋予可执行权限 lightgreen='\[\033[1;32m\]'
lightcyan='\[\033[1;36m\]'
lightpurple='\[\033[1;35m\]'
yellow='\[\033[1;33m\]'
nocolor='\[\033[0m\]'
source ~/.git-prompt.sh
set_bash_prompt(){
#PS1="[e[32m]u[e[m]@[e[33m]W[e[36m]$(__git_ps1 ' (%s)')[e[31m]$[e[m]"
PS1="${lightcyan}\t${lightgreen}\w${lightpurple}$(__git_ps1 ' (%s)')${yellow} → \[\e[m\]"
}
PROMPT_COMMAND="set_bash_prompt; $PROMPT_COMMAND"
wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash
source .bashrc
即可daemon可能要安装一下
sudo apt install git-daemon
先创建一个目录结构
Repository
.git
文件夹Repository目录下执行:git daemon --export-all --base-path='Repository目录' --port=8096
--export-all
开放当前目录下所有项目--enable=receive-pack
为了安全,默认是仓库不能被修改,添加这个参数就可以push了--base-path=''
指定开放的基本目录(指定开放别的路径)--port=8096
指定开放的端口--verbose
启动看到的日志信息更多&
末尾加上表示后台运行,默认是阻塞了当前git bash命令行使用退出程序的操作即可, Ctrl+Shift+C 放在了后台就jobs或者ps 然后kill
在需要克隆的目录下git clone git://localhost:8096/Project1
<Location /git>
AuthType Basic
AuthName "GIT Repository"
AuthUserFile "/home/mythos/GitRemoteRepo/htpassed"
Require valid-user
</Location>
htpasswd -cmb /home/mythos/GitRemoteRepo/htpsswd 账号名 密码
git init --bare 程序项目名称
git clone http://localhost/git/程序项目名称
输入用户名密码即可bin\openssl genrsa -des3 -out server.key 2048 -config conf\openssl.cnf
输入密码bin\openssl req -new -key server.key -out server.csr -config conf\openssl.cnf
输入之前密码bin\openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
输入之前密码bin\openssl rsa -in server.key.old -out server.key
LoadModule socache_shmcb_module..
LoadModule ssl_module..
Include conf/extra...
git -c http.sslVerify=false clone URL
git config http.sslVerify false
git touch file1 file2
新建三个文件echo " ">>file1
修改文件file1git rm 文件名
: 删除文件至缓存区git commit -am " "
从缓存提交(切记要先 commit 才能 push)git diff
: 查看当前工作树和暂存区的差别git diff --cached
:查看缓存中文件修改的痕迹和对比 输入q 退出git log --graph
:查看(图形化)提交日志 输入q退出git banrch
分支名 :创建新的分支git branch -a
查看当前分支信息git checkout -b
:创建一个分支,并立即切换git checkout -b feature-D origin/feature-D
新建一个分支来接收同步后面那个远程仓库的分支git pull
:获取最新的远程仓库分支git pull origin feature-D
:只把本地的feature-D分支更新到最新git reset --hard 哈希值
:数据库的回滚操作似的git reflog
查看仓库的操作日志git mv -k oldName newName
:更改文件名字 usage: git [--version] [--help] [-C <path>] [-c name=value]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
<command> [<args>]
edit (1)
git add a.txt b.txt
看邮件(2)
git reset(3)
git pull URL
1.1 编辑了两个文件并且添加到了index
1.2 接收邮件,发现某人要你pull,有一些改变需要你merge 下来
1.3 然而你已经把index给改变了,因为当前的index 和 HEAD commit不匹配了,但是你知道,即将pull的东西不会影响
到a.txt 和 b.txt,因此你可以revert这两个文件的改变,revert后,那些改变依然在working directory中,因此需要执行git reset
1.4 然后,执行了pull后 自动merge,两个文件依然在working directory中
git commit ...
git reset --soft HEAD^(1)
edit (2)
git commit -a -c ORIG_HEAD(3)
2.1 当提交后,你发现提交的代码不完善,需要重新编辑一下,执行 1 语句让working directory和reset之前一样,不做改变
2.2 对working tree下的文件做修改
2.3 然后使用reset之前那次commit的注释等相关信息都重新提交,注意老的HEAD会被备份到文件.git/ORIG_HEAD中,命令中就是引用了这个老的相关信息
-a 表示自动将所有的修改的和删除的文件都放进 stage area(理解为代码区,未被git跟踪的文件不受影响)
-c 表示 拿已经提交的commit对象中的信息来做这次的提交
这条命令就是,将所有更改的文件加入到stage area中,并使用上次的提交信息来提交
git branch myth/test (1)
git reset --hard HEAD^3 (2)
git checkout myth/test (3)
3.1 你已经提交了好几个commit,但是觉得不够成熟和完善,不足以添加到master分支上,所以在当前HEAD创建一个新分支
3.2 然后回滚掉最近三次提交(删除)
3.3 切换到新分支上就能对代码进行润色了,等待之后的merge
commit git reset --hard HEAD~3
git pull URL (1)
git reset --hard (2)
git pull .topic/branch (3)
git reset --hard ORIG_HEAD (4)
5.1 从origin上拉下来一些更新,但是产生了许多冲突,暂时又没时间去解决这些冲突,所以想撤销pull操作,等待以后来pull
5.2 由于pull操作产生了冲突,因此所有pull下来的改变尚未提交,仍然在stage area中,这种情况下
git reset --hard 与 git reset --hard HEAD 效果一样
都是清除那些使index和working directory乱套的东西
5.3 将topic/branch 合并到当前的branch,这次没有冲突,并且合并后的更改自动提交
5.4 但是此时又觉得将topic/branch合并过来又太早了,决定回滚merge操作,执行4语句 之前有说过,git reset操作会备份一个ORIG_HEAD,
pull和merge操作同样会,为了回滚操作
git pull (1)
git reset --merge ORIG_HEAD (2)
6.1 即使在本地已经更改了tree,导致了index的变化,也可以放心的pull,前提是你知道将要pull的内容不会覆盖你的working tree中的内容
6.2 git pull 之后,你发现这次pull的有问题,想要撤销操作,如果使用git reset --hard ORIG_HEAD也可以,但是这会删除add的代码
使用 git reset --merge ORIG_HEAD 就可以避免回滚操作时删除add的代码
在实际开发中经常出现这样的情形:你正在开发一个大的feature,此时来了一个紧急的BUG需要修复,但是目前在working tree 中的内容还不足以commit
,但是又必须切换到另外的branch去 fix bug
git checkout feature;
码代码
git commit -a -m "暂时中断OO" (1)
git checkout master
修复bug
git commit ;
git checkout feature
git reset --soft HEAD^ #go back to OO's state (2)
git reset (3)
7.1 属于临时提交。随便加点注释
7.2 这次reset删除了OO的commit,并且把working tree设置成提交OO之前的状态
7.3 此时,在index中仍然留有OO提交时所做的uncommit changes,git reset 将会清理index成为尚未提交时的状态,便于之后的工作
git reset -- a.txt (1)
git commit -am "Commit files inindex" (2)
git add a.txt (3)
8.1 把文件单独从index中去除
8.2 将index中的文件提交
8.3 再次添加回文件
git tag start
git checkout -b branch 1
编写
git commit .... (1)
编写
git checkout -b branch2 (2)
git reset --keep start (3)