A. Git修改提交歷史
Git的一個優勢在於,當你在和別人共享你的工作之前,可以隨便修改你的提交歷史,當然不管在什麼時候,最好不要改動已經推送到central server的commit,否則會產生一次變更的兩個版本。
在推送到central server之前,你可以選取staging area(暫存區)中的任意文件進行提交,也可以通過stash命令決定不與某些內容工作,也可以偷梁換柱地重寫已經發生的commits,這包括:改變commit信息,拆分commit,壓縮多條commit,改變提交的順序,甚至移除某些不再需要的commit等。
為了對於上面的描述有宏觀的了解,筆者在本地新建了一個倉庫且提交了三個commit,it seems like this:
其中SecondCommit中包含兩個txt文件,其餘兩個commit都只包含一個txt文件。
接下來就來篡改一下歷史吧!
(註:--pretty=format 表示格式化輸出,%h 表示提交對象的簡短哈希字串,%s 表示提交說明,為了方便後面的展示,筆者用alias命令簡化上面的命令: git config --global alias.last "log --pretty=format:"%h,%s"",之後如果需要查看log信息,git last 或者 git last -n 即可)
修改最後一條commit是所有修改提交歷史操作中最常見的一個。它的命令很簡單: git commit --amend
從英文單詞amend的字面意思(修改,改正)就可以理解此命令。
執行此命令會進入一個編輯框:
了解vim的同學可能對這不會感覺到陌生,這里簡單介紹一下,首先在鍵盤輸入i(i 表示insert插入,由此進入編輯模式),更改title信息,按Esc退出編輯模式,最後輸入 :wq (保存並且退出),收工。
如果對索引區的內容作了修改,先執行git add 命令,再執行git commit --amend , 效果是一樣的,更改後的log信息如下:
Git提供了互動式變基工具,可以在任何想要修改的commit後停止,做任何想做的事。
通過git rebase -i 命令來互動式的運行變基(註:-i 是--interactive的縮寫)。同時需要指定想要重寫多久遠的歷史,比如修改最近三次提交:git rebase -i HEAD~3 ,因為筆者的FirstCommit是repository裡面的第一個提交,所以筆者採用的是git rebase -i --root命令,有興趣的同學可以看看這個: http://stackoverflow.com/questions/2246208/change-first-commit-of-project-with-git/2309391#2309391.
執行git rebase -i --root命令,彈出如下編輯框:
需要注意的是commit顯示順序剛好和git log的顯示順序相反。尤其注意Commands,之後所有的操作都是基於這些命令, 這里筆者依次解釋一下:
p , pick = use commit: 直接使用commit 不做任何修改,其中p 是pick的縮寫,以下雷同;
r , reword = use commit, but edit the commit message: 使用commit,但是會更改commit 信息;
e , edit = use commit, but stop for amending :使用commit,但是遇到此命令時會停止合並;
s , squash = use commit, but meld into previous commit: 使用commit,但是會合並到前一個commit中;
f , fixup = like "squash", but discard this commit's log message:和squash類似,但是會拋棄commit的log信息
x , exec = run command (the rest of the line) using shell:使用shell運行命令
d , drop = remove commit:丟棄commit
整個其實就是一個腳本,每一行就相當於一個命令,位置可以互換,命令是從上往下執行的。如果移除某一行,對應的commit就丟失了,但是如果把所有的行都移除的話,整個rebase就被終止了。
了解了上面的命令,修改多條commit就顯得很簡單了。
由於篇幅的限制,這里筆者就改變第一條commit的提交信息:
之後便會執行rebase過程,然後彈出一個編輯框,修改commit信息即可。
現在的log信息如下:
上面我們提到SecondCommit中包含兩個文件,現在筆者將其拆分成兩個commit,這個時候需要用到edit命令。
同樣的先進入互動式變基: git rebase -i --root
當從上往下執行rebase的時候,遇到edit命令將會暫停rebase。
此時我們要做的就是reset SecondCommit的提交 git reset HEAD~
這時候用git status 查看最新的狀態:
互動式變基正在執行,SecondCommit的提交已經從索引區變成untrcked的狀態了。我們需要做的就是將這兩個文件分別add到暫存區然後commit到索引區。
$ git add newfile1.txt
$ git commit -m "SecondCommitSplit-1
$ git add newfile2.txt
$git commit -m "SecondCommitSplit-2
完成上面的操作後還是處於rebase的狀態,讓rebase繼續執行即可
git rebase --continue
現在log信息如下:
上面我們說過squash和fixup命令具有合並commit的功能,筆者習慣用的是fixup命令,只保存一個message信息。
比如我們現在要合並最近的兩個commit:
中間還給SecondCommitSplit-2更改了commit 信息
合並後的log信息如下:
上面講過,更改行的位置即可改變commit的提交順序,比如說把第一條和第三條commit的順序互換:
修改順序後的log信息如下:
當然,如果commit之間有相互依賴關系的話就沒有這么簡單了。
其實整篇文章都是圍繞pick,reword,edit,squash,fixup等幾個常用的命令進行的簡單實踐,實際開發過程中的情況還要復雜,具體問題還是要具體分析,筆者只是拋磚引玉,如果有不妥當的地方,還請各位看官指點一二。
B. 怎樣刪除AIX命令歷史記錄
UNIX(AIX)系統常用命令
AIX的命令格式:
$command option(s) argument(s)
command:命令
option(s):命令選項,均以'-'號開始
argument(s):參數
命令 用途
----------------------------------------------------------------------------
prtconf 顯示系統的各項主要配置
svmon -G 查看內存(4k)
iostat 2 查看磁碟讀寫情況(每2秒刷新);
set -o vi 調用緩沖區 k,j,x,h,l 向上下翻,Esc
smit 進入管理界面
cd 改變路徑
ls 列出文件
ls -aF 列出隱含文件,並適當分類
ls -l 列出文件的詳細信息
ls -ltr
more 輸出文件內容到屏幕
cat 顯示文本文件內容/合並文件
pg 分頁顯示文件內容,回車後下一頁
file 顯示文件屬性(可執行/ASCII/等)
clear 清屏
mkdir 創建目錄
rmdir 刪除目錄
cp 拷貝文件
mv 文件/目錄改名,轉移
rm 刪除文件/目錄, 如:rm -fr ora*
rmdir 刪除目錄,如: rmdir oracle
df -k 顯示文件系統的信息
磁碟使用信息匯總
mount 顯示已經掛裝的文件系統的信息或掛裝文件系統 mount -rv cdrfs /dev/cd0 /cdrom mount /dev/lv02 /u01
umount 卸載某個文件系統 umount /cdrom
fuser -kxuc /dev/cd0 當光碟機不能正常釋放時
lsattr -E -l sys0 -a realmem 察看內存的命令
env 輸出用戶環境變數到屏幕
id 察看用戶的屬性
whoami 察看當前用戶名
who 查看已經登錄的用戶
who -r 查看目前系統的運行級別
users 用單獨的一行列印出當前登錄的用戶,每個顯示的用戶名對應一個登錄會話
如果一個用戶有不止一個登錄會話,那他的用戶名將顯示相同的次數
w 顯示當前系統中每個用戶和它所運行的進程信息
last 此命令往回搜索wtmp來顯示自從文件第一次創建以來登錄過的用戶
whereis 命令的絕對路徑
passwd 設置用戶密碼
su 改變/切換用戶id
lsuser ALL 列出所有已經創建的用戶
lsgroup ALL 列出所有已經創建的組
smitty user 管理用戶
mkuser 創建新用戶,創建用戶的預設屬性值於文件:/usr/lib/security/mkuser.default,只能由root修改
smitty group 管理組
mkgroup 創建新組
chfn 改變用戶詳細信息
jobs 查看後台任務/進程
fg 把後台進程調到前台
bg 把當前進程調到後台運行
grep 查找匹配字元/字元串
netstat -i 顯示網路連接信息及統計信息
netstat -IN
netstat -rn 顯示核心路由表
netstat -I 網路設置名 埠號 監視埠情況
netstat -v 正在使用的設備驅動程序的統計信息
netstat -m 網路使用的內存空間情況
netstat -D 顯示丟棄包的情況
ifconfig -a 顯示網路配置信息
umask 顯示文件創建掩碼,即新建文件或目錄的預設許可權,如#umask 664
date 系統時間
find path expression 查找文件,expression的值有:
-name/-type/-size/-mtime(修改時間)/-perm(許可權)/-usr/-o(或)
uname 顯示操作系統信息
oslevel 系統版本
man 幫助文件
smitty clstart | clstop 起用|關閉HA
smitty hamcp
smitty chinet 改變網卡的配置信息
smitty cluster 配置cluster
smitty hacmp 配置hacmp
/usr/sbin/cluster/clstat & 顯示cluster信息
dbassist 啟動oracle資料庫配置助手(dbca -9i 可以用配置資料庫方式啟動一個資料庫)
netasst 啟動oracle資料庫listener配置助手(-9i oemapp是一個包,後跟參數,不同工具)
vi 文件編輯器
動作字元:
a 在當前字元後添加文字; x 刪除單個字元;
A 在當前行最後添加文字; dw 刪除至當前詞尾;
i 在當前字元前添加文字; d$ 刪除至當前行尾;
I 在當前行開始處添加文字; d0 刪除至當前行首;
o 在當前行後添加新行; dd 刪除當前行;
O 在當前行前添加新行; :20,40d 刪除20行至40行;
/text 向後查詢 ?text 向前查詢
r 修改當前字元 R 覆蓋字元,直至按下[ESC]
s 刪除當前字元,並可添加字元直至按[ESC]
S 刪除當前行,並可添加字元直至按[ESC]
yy 將當前行存入緩沖區
dd
p
P
errpt|pg 創建/顯示錯誤文件
errclear 0 清除錯誤日誌文件內容
lsvg -o 顯示卷組信息
lsvg -l rootvg
instfix -iv|grep AIX_ML 安裝的文件集
smitty tcpip tcp/ip配置
lsdev -Cc disk 系統設備信息(磁碟)
lspv 顯示卷組里的物理卷信息
lsdev -Cc pdisk 顯示陣列里的磁碟信息
errclear 清除error log
lsps -a 顯示交換空間
swapon /dev/paging01 激活交換空間
chps -a paging01 刪除交換空間
rmps paging01 刪除不活動的交換空間
smit mkps 增加交換空間
smit chps 修改交換空間
varyonvg 激活卷組 如:varyonvg datavg 將datavg激活
varyoffvg 關閉卷組
/ect/services 查看埠
/etc/hosts 機器名IP對照表
/etc/inittab 相當於DOS的AUTOEXEC.BAT文件
/etc/filesystems 記錄所有的文件系統設置
增加並配置埠
刪除埠
ftp://[email protected]/ 在客戶端登錄AIX(用IE)
lscfg
lsdev
route ADD 0 10.188.12.1
route add default 192.168.0.1 設置網關(或在/etc/defaultrouter文件中加入網關地址,重起機器就行)
su root 以ROOT用戶登錄;
smitty lv 增加邏輯盤
LN -s 源目錄 目標目錄 鏈接
ls -l 查看許可權
./fielname 運行filename文件
smitty clstart 啟動HA
smitty clstop 停止HA
.filename 表示filename文件(目錄)為隱藏;
cat file1 >> file2 合並file1到file2
SMIT 綜合管理工具
# 表示ROOT用戶;
$ 表示一般用戶;
shutdown -fr 快速重啟;
smitty crjfs 創建結點; mount /u05 chown -R oracle.dbs u05 chmod -R 777 u05
加一個文件系統的步驟: 加文件系統/chmod/chown/mount 文件系統名
smitty jfs
smitty lv
smitty lvm 管理邏輯卷
smitty vg 管理卷組
smitty chvg
drwxrwxrwx d表示目錄,-表示普通文件,r表示鏈接; d421421421 777全部許可權
-rwxrwxrwx 第2-4:屬主用戶,5-7:同組用戶,8-10所有用戶
date 0217142590 This sets the date and time to Sat Feb 17 14:25:00 CST 1990.
當root不能在其終端上登錄時 修改/etc/hosts文件,查看其IP地址對應的主機名;
當其他用戶不能在其終端上登錄時 刪除用戶,並刪除/home下對應的目錄,重建;
smitty aio 調整aioservers
#pstat -a|grep aios|wc -l 查看aio的值是否常達到MAX,IF 增加MIN, MAX aio;
當任何用戶都不能登錄圖形界面時 有可能根結點充滿,在登錄窗口用字元方式登錄,加大根結點空間即可;
ps -ef | grep cluster 查找包含"cluster"的進程
more /etc/passwd|grep zhxx 查找靜態字元"zhxx"
pe -f 進程查看,如:# ps -f
UID PID PPID C STIME TTY TIME CMD
root 43626 45014 0 20:38:58 pts/1 0:00 -ksh
root 47710 43626 2 21:08:03 pts/1 0:00 ps -f
用戶ID 進程ID 父進程ID CPU利用率 開始時間 控制台 運行時間 命令
kill -9 **** ***為進程號,可用ps獲得
ping 10.188.12.252 -l 17000 -t 以17000 bytes/包 ping 目標
crontab 創建計劃任務(crontab -l 查看已有任務, crontab -e 編輯或增加,刪除任務)
0 2 * * * /u05/dmpbak/auto.sh 表示:每天兩點執行/u05/dmpbak/auto.sh文件
lsfs 列出所有文件系統
lsvg -l rootvg 列出rootvg的卷
lsvg -p rootvg 列出物理卷信息
lsvg datavg 可查詢空閑物理分區數
smit reogvg 重組卷組
smit importvg 導出卷組,卷組必須是不活動的;
lspv hdisk0 顯示物理卷
lspv -l hdisk0 邏輯卷映射
lspv -p hdisk0 物理卷映射
defragfs -q /u01 報告文件系統的當前狀態
defragfs -r /u01 得到碎片連續化操作後和前後對比情況
defragfs /u01 執行碎片連續化操作
fsck /u05 檢查u05文件系統
xclock 時鍾,可用於檢查環境是否正常
chmod 777 /u02
r 2=3 相當於:chmod 777 /u03
rsh zzyc2_sev 在其他機器上登錄某主機
dgmgrl 類似SVRMGRL(9i)
ps -ef |grep oracle |pg 查看oracle用戶的所有進程
kill -9 14206 殺14206#進程
kill -l 顯示KILL命令可以用的信號量
killall signal 刪除除發送外的其他所有進程
/usr/sbin/cluster/clstat & 顯示雙機熱備狀態圖
exit或logout 退出登錄
qprt filename1,filename2... 列印文件
qchk 查看列印隊列
qcan 取消列印作業
lsps -a 查詢交換空間,如USE超過70%,則要增加
set 查看已定義的變數;
echo $name 查看某個變數的值;
xxx=value 定義變數
unset xxx 刪除變數
`` 把``之間的內容作為一個命令,返回命令結果; 如$now=`date` $echo $now
'' 直接顯示''間的內容,不予解釋;
"" 解釋""間的$,``,等字元的特殊含義;
忽略後的特殊字元的特殊含義;
$$ 表示當前進程的ID
$0 當前shell程序的名稱
$# 傳給當前shell Script的參數個數;
$* 傳給當前shell Script的第*個參數,$1-$9,${10}......
$? 最近一個命令的返回值;
$! 最近一個後台進程的ID號;
expr shell下的四則運算:
* 乘;/除; % 求余數; +,- 如:expr (3+3)*(4-2)
command1 && command2 如果第一個命令執行成功,則運行第二個命令;
command1 || command2 如果第一個命令執行失敗,則運行第二個命令;
test 表達式 測試條件表達式,主要有:
-f filename 文件是否存在;
-d dirctory 目錄是否存在;
-r filename 文件存在,且能被當前進程讀;
-w filename 文件存在,且能被當前進程寫;
-x filename 文件存在,且能被當前進程運行;
-n string 字元STRING長度非零;
-z string 字元STRING長度零;
string1=string2 兩個字元串相同;
integer1 -eq integer2 兩個變數相等;(ne:不等 gt:大於 lt:小於 le:小於等於 ge:大於等於)
if ..
then ..
else...
fi
read xxx 從標准輸入讀入一行,賦給xxx變數; read x echo $x
for i in ....
do
...
done
while expression
do
...
done
ksh scriptname
scriptname
pathname/scriptname shell script的三種執行方法
#command 前台進程
#command & 後台進程
nice/renice 增加/再增加nice的值,從而降低進程優先順序;
nohup command & 使用戶的後台進程在用戶退出時仍然運行
#alias alias=string 賦命令別名
unalias aliasname 取消命令別名
history 顯示最後的16條命令
cal 2003/cal 2 2003 日歷
finger [oracle] 顯示用戶信息
mail 接收,發出,查看電子郵件
clear 清屏
echo 顯示指定信息
wc filename 統計指定文件的行數,詞數,位元組數
head filename 顯示文件頭
tail filename 顯示文件尾
tail -f /tmp/hacmp.out 顯示HACMP啟動情況
[^+C]/[^+d]/[^+s]/[^+q]/[^+u] 終止/結束文件傳輸/暫停屏幕輸出/繼續屏幕輸出/刪除當前輸入行
smit(system management interface Tool)
其log文件/script文件保存在各用戶目錄下;
alog -o -t boot 查看引導日誌
chtz 設置新時區
/etc/profile
/etc/environment
$HOME/.profile 系統設置用戶環境的主要文件;
lsuser -a id home ALL 列出所有用戶
/etc/motd 用戶登錄時顯示的信息,可直接編輯,但如果用戶主目錄下$HOME/.hushlogin存在,motd不顯示;
wall ***** 向各登錄用戶發出*****消息,用戶終端上將馬上顯示;
/var/adm/sulog su命令執行記錄
/var/adm/wtmp,/etc/utmp 用who命令查看登錄記錄
last root |pg root用戶登錄記錄
last reboot | pg 重啟記錄;
/etc/passwd 合法用戶(不含密碼)
/etc/group
/etc/security 普通用戶不能訪問的安全性文件目錄
lsdev -P 列出所有的設備, lsdev -Pc disk
smitty devices 設備管理
lsattr -E -l sys0 列出已配置的設備
jfs/Cdrfs/Nfs AIX支持的三種文件系統
/var/adm/wtmp
/var/spool/*/*
/smit.log
/etc/securibty/failedlogin
/var/adm/sulog 這些文件增長很快,要定期清理,可用cat /dev/null > filename方式清理
/u05 | sort -r -n 查詢文件或目錄所佔用的磁碟塊數
vmstat 顯示虛擬內存,內存及CPU活動信息;
arp -a 查看解析協議ARP表
hostname 顯示機器名
/etc/rc.tcpip 系統啟動時自動執行,進而執行以下子進程:
-syslogd :錯誤信息日誌
-portmap :埠查找
-inetd :Internet服務的主守護進程
-named :域名伺服器
-lpd :列印伺服器
-routed or gated :動態路由
-sendmail :郵件系統
-timed :時間伺服器
-rwhod :遠程用戶信息
-snmpd :SNMP代理進程
host 機器名/IP 實現IP與機器名的轉換
rsh PTYC2_svc date 執行另一台主機上的命令
lscfg 顯示機器配置信息
lsdev -C -c if 顯示網路介面描述
lsdev -C -c adapetr 顯示適配描述
netpmon -v 物理/邏輯資源的詳細報告
ps aux 查詢內存使用情況
sar [-u|-c|-a|-q|-r] [-p] 1 10 查詢系統負載情況
traceroute 10.188.182.1 跟蹤IP
netpmon 可以監控關於網路行為的系統事件和性能以及網路行為對CPU的消耗。
lsdev -C|grep Process|wc -l 顯示CPU數量
smitty mklv 創建裸設備(字元型設備);
smitty rmlv 刪除裸設備(字元型設備);
lslv ***** ******為裸設備名稱,顯示裸設備相關參數
/etc/default/login 加上CONSOLE=/dev/console 後,可防止root用戶telnet;
SSL工具代替telnet等,增加安全性
/etc/passwd .../bin/sh 對應 .profile
/etc/passwd .../bin/csh對應 .login
系統正常從桌面登錄執行 .dtprofile
su - username執行 .profile
vmstat 查詢內存情況
iostat
mpstat 查詢CPU情況
/etc/vfstab 磁碟目錄規劃
mount 目錄安裝情況
format 查看磁碟物理信息
p 分區
C. alias中如何去除歷史記錄
不知道你想表達的是不是想刪除構建歷史
如果要刪除哪部分的構建歷史,只需要選中一部分
或者想刪除全部的構建歷史,就全部選中,
然後選擇工具,刪除構建歷史,如下圖:
你有什麼軟體方面的問題,都可以直接找我回答。
D. alias的歷史記錄檢查工具在哪裡
palette面板的Object Edit 裡面,叫Query Edit,前提是你沒有刪除歷史記錄的前提下
E. alias 歷史記錄在哪
你的模型里得有構建歷史,構建歷史按鈕才會出來。